剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 - 力扣(LeetCode)
双指针从两边往中间扫就可以了
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int i = 0, j = nums.size()-1;
while(i < j){
while(i < j && nums[i]%2 == 1) ++i;
while(i < j && nums[j]%2 == 0) --j;
swap(nums[i], nums[j]);
++i; --j;
}
return nums;
}
};
其实这就是快速排序中的partition:
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
partition(nums.begin(), nums.end(), [](const int n){return n%2;});
return nums;
}
};
位运算
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
partition(nums.begin(), nums.end(), [](const int n){return n&1;});
return nums;
}
};