文章目录
一、题目
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 numsi is odd, i is odd, and whenever numsi 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 * 104
nums.length is even.
Half of the integers in nums are even.
0 <= numsi <= 1000
Follow Up: Could you solve it in-place?
二、题解
cpp
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& nums) {
int n = nums.size();
int oddIndex = 1;
for(int i = 0;i < n;i+=2){
//存在偶数位上的奇数
if(nums[i] % 2 == 1){
//查找奇数位上的偶数
while(nums[oddIndex] % 2 != 0) oddIndex += 2;
swap(nums[i],nums[oddIndex]);
}
}
return nums;
}
};