905-sort-array-by-parity

Try it on leetcode

Description

Given an integer array nums, move all the even integers at the beginning of the array followed by all the odd integers.

Return any array that satisfies this condition.

 

Example 1:

Input: nums = [3,1,2,4]
Output: [2,4,3,1]
Explanation: The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.

Example 2:

Input: nums = [0]
Output: [0]

 

Constraints:

  • 1 <= nums.length <= 5000
  • 0 <= nums[i] <= 5000

Solution(Python)

class Solution:
    def sortArrayByParity(self, nums: List[int]) -> List[int]:
        return self.inPlace(nums)

    # Time Complexity: O(NlogN)
    # Space Complexity: O(N)
    def sorting(self, nums):
        nums.sort(key=lambda x: x % 2)
        return nums

    # Time Complexity: O(N)
    # Space Complexity: O(N)
    def twopass(self, nums):
        return [x for x in nums if not x % 2] + [x for x in nums if x % 2]

    # Time Complexity: O(N)
    # Space Complexity: O(1)
    def inPlace(self, nums):
        i, j = 0, len(nums) - 1
        while i < j:
            i_par = nums[i] % 2
            j_par = nums[j] % 2

            if i_par and not j_par:
                nums[i], nums[j] = nums[j], nums[i]

            if not i_par:
                i += 1
            if j_par:
                j -= 1

        return nums