zoukankan      html  css  js  c++  java
  • 922. Sort Array By Parity II

    Given an array A of non-negative integers, half of the integers in A are odd, and half of the integers are even.

    Sort the array so that whenever A[i] is odd, i is odd; and whenever A[i] is even, i is even.

    You may return any answer array that satisfies this condition.

    Example 1:

    Input: [4,2,5,7]
    Output: [4,5,2,7]
    Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.
    

    Note:

    1. 2 <= A.length <= 20000
    2. A.length % 2 == 0
    3. 0 <= A[i] <= 1000

    题目说有一半是奇数,一半是偶数。这是一个简化。降低了处理边界的难度。

    #include<vector>
    #include <cstdlib>
    #include<iostream>
    #include <unordered_set>
    #include <algorithm>
    #include<string>
    #include<queue>
    
    using namespace std;
    
    //Given an array A of non-negative integers, half of the integers in A are odd, and half of the integers are even.
    //
    //Sort the array so that whenever A[i] is odd, i is odd; and whenever A[i] is even, i is even.
    //
    //You may return any answer array that satisfies this condition.
    //
    //
    //
    //Example 1:
    //
    //Input: [4,2,5,7]
    //Output: [4,5,2,7]
    //Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.
    //Note:
    //
    //2 <= A.length <= 20000
    //A.length % 2 == 0
    //0 <= A[i] <= 1000
    
    class Solution {
    public:
        vector<int> sortArrayByParityII(vector<int> &A) {
            int i = -1;
            int n = A.size();
            for (int j = 0; j < n; j = j + 2) {
                if (A[j] % 2 == 0) {
                    continue;
                } else {
                    //A[j]%2==1 at this moment
                    i += 2;
                    while (A[i] % 2 == 1)
                        i += 2;
                    //A[i]%2==0 at this monent
                    //cout << "i " << i << " j " << j << endl;
                    swap(A[i], A[j]);
                }
            }
            return A;
        }
    };
    
    int main() {
    
        Solution solution;
        vector<int> A{4, 2, 5, 7};
        vector<int> res = solution.sortArrayByParityII(A);
        for (auto a:res)
            cout << a << " ";
        cout << endl;
        return 0;
    }
  • 相关阅读:
    HDU 3586 二分答案+树形DP判定
    POJ 3140 树形DP
    POJ 1741 树的点分治
    POJ 1655 求树的重心
    CF 219D 树形DP
    HDU 2196树形DP(2个方向)
    HDU 1520 树形DP入门
    POJ 1159 Palindrome(最长公共子序列)
    树状数组 区间更新 区间查询
    HDU 1556 BIT区间修改+单点查询(fread读入优化)
  • 原文地址:https://www.cnblogs.com/learning-c/p/9788102.html
Copyright © 2011-2022 走看看