leetcode-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:

1
2
3
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

分析


定义一个 i 变量用来记录偶数位的索引,j 变量记录奇数位的索引,当 i, j 位置上的值都不匹配时,交换两值,时间复杂度是 $O(n)$。

解决方案1(Java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public int[] sortArrayByParityII(int[] A) {
for (int i = 0, j = 1; i < A.length && j < A.length; ) {
if (A[i]%2 == 1 && A[j]%2 == 0) {
A[i] = A[i] + A[j];
A[j] = A[i] - A[j];
A[i] = A[i] - A[j];
}
if (A[i]%2 == 0) {
i += 2;
}
if (A[j]%2 == 1) {
j += 2;
}
}
return A;
}
}

题目来源