# LC 922. Sort Array By Parity II ### [Problem link](https://leetcode.com/problems/sort-array-by-parity-ii/) ###### tags: `leedcode` `python` `c++` `easy` Given an array of integers <code>nums</code>, half of the integers in <code>nums</code> are **odd** , and the other half are **even** . Sort the array so that whenever <code>nums[i]</code> is odd, <code>i</code> is **odd** , and whenever <code>nums[i]</code> is even, <code>i</code> is **even** . Return any answer array that satisfies this condition. **Example 1:** ``` Input: nums = [4,2,5,7] Output: [4,5,2,7] Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted. ``` **Example 2:** ``` Input: nums = [2,3] Output: [2,3] ``` **Constraints:** - <code>2 <= nums.length <= 2 * 10<sup>4</sup></code> - <code>nums.length</code> is even. - Half of the integers in <code>nums</code> are even. - <code>0 <= nums[i] <= 1000</code> **Follow Up:** Could you solve it in-place? ## Solution 1 #### Python ```python= class Solution: def sortArrayByParityII(self, nums: List[int]) -> List[int]: n = len(nums) even_idx, odd_idx = 0, 1 res = [0] * n for num in nums: if num % 2: res[odd_idx] = num odd_idx += 2 else: res[even_idx] = num even_idx += 2 return res ``` ```cpp= class Solution { public: vector<int> sortArrayByParityII(vector<int>& nums) { int evenIdx = 0; int oddIdx = 1; vector<int> res(nums.size()); for (int i = 0; i < nums.size(); i++) { if (nums[i] % 2) { res[oddIdx] = nums[i]; oddIdx += 2; } else { res[evenIdx] = nums[i]; evenIdx += 2; } } return res; } }; ``` ## Soultion 2 - Follow Up #### Python ```python= class Solution: def sortArrayByParityII(self, nums: List[int]) -> List[int]: n = len(nums) odd_idx = 1 for i in range(0, n, 2): if nums[i] % 2: while nums[odd_idx] % 2: odd_idx += 2 nums[i], nums[odd_idx] = nums[odd_idx], nums[i] return nums ``` #### C++ ```cpp= class Solution { public: vector<int> sortArrayByParityII(vector<int>& nums) { int oddIdx = 1; for (int i = 0; i < nums.size(); i += 2) { if (nums[i] % 2 == 1) { while (nums[oddIdx] % 2 == 1) { oddIdx += 2; } swap(nums[i], nums[oddIdx]); } } return nums; } }; ``` >### Complexity >| | Time Complexity | Space Complexity | >| ----------- | --------------- | ---------------- | >| Solution 1 | O(n) | O(n) | >| Solution 2 | O(n) | O(1) | ## Note x