力扣905:按奇偶排序数组
作者:互联网
905. 按奇偶排序数组
题目描述:
给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。
你可以返回满足此条件的任何数组作为答案。
示例:
输入:[3,1,2,4]
输出:[2,4,3,1]
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。
提示:
1 <= A.length <= 5000
0 <= A[i] <= 5000
解法一:临时空间
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
vector<int>jie; //创建临时空间,依次填充奇数偶数
for(int i:nums){
if(!(i&1))jie.emplace_back(i);
}
for(int i:nums){
if(i&1)jie.emplace_back(i);
}
return jie;
}
};
解法二:双指针
核心思想:
双指针,左指针遇到偶数就跳过,右指针遇到奇数就跳过,当左指针为奇数及右指针为偶数时,进行交换。
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
int left=0,right=nums.size()-1;
while(left<right){
if((nums[left]&1)>(nums[right]&1))swap(nums[left],nums[right]);
if((nums[left]&1)==0)left++;
if(nums[right]&1)right--;
} //注意:位运算符号优先级低于比较符
return nums;
}
};
解法三:自定义排序
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
sort(nums.begin(),nums.end(),[&](int a,int b){
return (a&1)<(b&1);//注意优先级
});
return nums;
}
};
结果:
标签:奇偶,right,nums,int,905,力扣,vector,指针,left 来源: https://blog.csdn.net/weixin_62212397/article/details/121729042