922. 按奇偶排序数组Ⅱ

题目

自己是这样写的

class Solution {
public:
    vector<int> sortArrayByParityII(vector<int>& nums) {
        int even = 0, odd = 1;
        while (even < nums.size() && odd < nums.size())
        {
            if (nums[even] % 2 != 0 && nums[odd] %2 == 0)
                swap(nums[even], nums[odd]);
            if (nums[even] % 2 == 0)
                even += 2;
            if (nums[odd] % 2 != 0)
                odd += 2;
        }
        return nums;
    }
};

思路的宗旨主要是这两条:

  1. 把奇数排好了,偶数也就自动排好了,或者说把偶数排好了,奇数也就自动排好了。所以只需要单独考虑奇数或者偶数的排列

  2. 自己写的是单独考虑了偶数的排列。然后对于while循环里的内容就是分情况看要进行什么操作了,但是最重要的一条就是只有在nums[even] % 2 != 0 && nums[odd] %2 == 0的时候才能进行交换,其余的两个if都只是为了找到合适的交换位置。

看了下卡哥的思路,卡哥提供了三种方法。

卡哥的方法三思维也值得看下。

卡哥方法三代码:

class Solution {
public:
    vector<int> sortArrayByParityII(vector<int>& A) {
        int oddIndex = 1;
        for (int i = 0; i < A.size(); i += 2) {
            if (A[i] % 2 == 1) { // 在偶数位遇到了奇数
                while(A[oddIndex] % 2 != 0) oddIndex += 2; // 在奇数位找一个偶数
                swap(A[i], A[oddIndex]); // 替换
            }
        }
        return A;
    }
};
posted @   hisun9  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示