922. Sort Array By Parity II
Description
Given an array of integers nums, half of the integers in nums are odd, and the other half are even.
Sort the array so that whenever nums[i] is odd, i is odd, and whenever nums[i] is even, i 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:
2 <= nums.length <= 2 * 104nums.lengthis even.- Half of the integers in
numsare even. 0 <= nums[i] <= 1000
Follow Up: Could you solve it in-place?
Solutions
Solution 1: Two Pointers
Thinking
Even indices must hold evens and odd indices odds, and the two kinds are equally many. An extra array would work, but we can swap in place. \(i\) walks even indices; when that slot is odd, \(j\) walks odd indices until an even is found and they swap. \(j\) only increases, so the pass is linear.
We use two pointers \(i\) and \(j\) to point to even and odd indices, respectively. Initially, \(i = 0\) and \(j = 1\).
When \(i\) points to an even index, if \(\textit{nums}[i]\) is odd, we need to find an odd index \(j\) such that \(\textit{nums}[j]\) is even, and then swap \(\textit{nums}[i]\) and \(\textit{nums}[j]\). Continue traversing until \(i\) reaches the end of the array.
The time complexity is \(O(n)\), where \(n\) is the length of the array \(\textit{nums}\). The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |