zoukankan      html  css  js  c++  java
  • LeetCode 922 按奇偶排序数组2

    LeetCode 922 按奇偶排序数组2

    https://leetcode-cn.com/problems/sort-array-by-parity-ii/

    既然题目要求说数组A的元素个数是偶数个并且其中一半是奇数一半是偶数,那么该数组一定可以排序成当A[i]为奇数时,i也是奇数;当A[i]为偶数时,i也是偶数的形式。

    我们稍微分析一下可以发现不满足上述要求的情况有两种:
    (1)i是奇数,但A[i]是偶数
    (2)i是偶数,但A[i]是奇数

    而且我们只要把上述两种情况下的元素调换即可满足题目要求。由于前面分析过,题目一定是可解的,所以可以推断上述情况(1)和(2)在数组A中出现的个数一定是相同的。我们可以对数组A扫描一遍,然后把情况(1)和(2)所对应的下标存入两个集合(S_1)(S_2)当中,这两个集合的个数应该是相等的。然后依次从这两个集合当中取出两个下标值,交换它们对应的元素即可。

    代码如下:

    class Solution {
    public:
        vector<int> sortArrayByParityII(vector<int>& A) {
            vector<int> s1, s2;
            int sz = A.size();
            for (int i = 0; i < sz; ++i) {
                if (i % 2 == 1 && A[i] % 2 == 0) s1.push_back(i);
                if (i % 2 == 0 && A[i] % 2 == 1) s2.push_back(i);
            }
            assert(s1.size() == s2.size());
            for (int i = 0; i < s1.size(); ++i) {
                swap(A[s1[i]], A[s2[i]]);
            }
    
            return A;
        }
    };
    

    当然本题的力扣题解里有其他的解法,但题比较简单,这里就不写其他解法了。

  • 相关阅读:
    Promise对象
    iterator和for of 循环
    vue项目基本流程
    BASH_SOURCE 用法
    Java GC CMS 日志分析
    zookeeper 删除snapshot和transaction log的源码解读
    openresty nginx 安装过程记录
    opentesty--luasocket 安装
    为什么要使用SLF4J而不是Log4J
    要过一遍的博客列表
  • 原文地址:https://www.cnblogs.com/wallace-lai/p/13961909.html
Copyright © 2011-2022 走看看