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

解题要点:

给两个指针,分别从偶数和奇数位开始找,如果不符合偶数或奇数的规则,将这两个交换。

class Solution {
    public int[] sortArrayByParityII(int[] A) {
        int i = 0; int j = 1;
        int N = A.length;
        while(i < N && j < N){

            while(i < N && A[i] % 2 == 0) i += 2;
            while(j < N && A[j] % 2 != 0) j += 2;

            if(i < N && j < N)
                swap(A, i, j);
        }
        return A;
    }
    
    public void swap(int[] A, int i, int j){
        int temp = A[i];
        A[i] = A[j];
        A[j] = temp;
    }
}

Last updated

Was this helpful?