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
这道题,最简单的算法是重新开辟一个数组,让后遍历数组,按照要求一个个插入到新的数组里面。时间复杂度O(n),空间复杂度为O(n)。
优化版本,时间复杂度为O(n),空间复杂度O(1)。
class Solution {
public int[] sortArrayByParityII(int[] A) {
int odd = 1;
int even = 0;
while(odd < A.length && even <A.length){
if(A[even]%2==1){
int temp = A[even];
A[even] = A[odd];
A[odd] = temp;
odd+=2;
}else
even+=2;
}
return A;
}
}