其他分享
首页 > 其他分享> > 力扣905:按奇偶排序数组

力扣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