Skip to main content

905.按奇偶排序数组

思路

暴力:

可以暴力模拟,先把奇数和偶数抽出来放到两个数组,然后分别排序(也许都不用排序),然后再合并。但是空间复杂度比较高。

优化方案:

双指针,从左往右找第一个不是偶数的,从右往左找第一个不是奇数的,然后交换。(类似快排的思想)

代码

暴力:

class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
vector<int> odd, even;

for (int i = 0; i < nums.size(); i++) {
if (nums[i] % 2 == 0) odd.push_back(nums[i]);
else even.push_back(nums[i]);
}

for (int i = 0; i < even.size(); i++) {
odd.push_back(even[i]);
}
return odd;
}
};

双指针:

class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
int l = 0, r = nums.size() - 1;

while (l < r) {
while (l < r && nums[l] % 2 == 0) l++;
while (l < r && nums[r] % 2 != 0) r--;
if (l < r && nums[l] % 2 != 0 && nums[r] % 2 == 0) {
swap(nums[l], nums[r]);
l++, r--;
}
}
return nums;
}
};