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 fi = 0, li = A.size() - 1;
        while(fi < li) {
            if (A[fi] % 2 == 0) {
                fi++;
                continue;
            }
            while (li > fi) {
                if ( A[li] % 2 == 0) {
                    break;
                }
                li--;
            }
            if (li <= fi) {
                break;
            }
            std::swap(A[li], A[fi]);
            fi++; li--;
        }

        std::vector<int> res;
        res.reserve(A.size());
        for (int i = 0; i < A.size() / 2; i++) {
            res.push_back(A[i]);
            res.push_back(A[A.size() / 2 + i]);
        }
        return res;
    }
};
共 0 条回复
暂时没有人回复哦,赶紧抢沙发
发表新回复

作者

sryan
today is a good day