版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24133491/article/details/83053835
Description:
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
题意:将数组中所有的偶数移动到下标为偶数的位置,将所有的奇数移动到下标为奇数的位置;对元素的相对位置没有要求;
解法:因为数组中有部分的元素已经在正确的位置上面了,所以我们只需要将位置不正确的两个奇数元素和偶数元素调换位置即可;
Java
class Solution {
public int[] sortArrayByParityII(int[] A) {
int odd = 1;
int even = 0;
while (odd < A.length && even < A.length) {
while (odd < A.length && A[odd] % 2 == 1) odd += 2;
while (even < A.length && A[even] % 2 == 0) even += 2;
if (odd >= A.length || even >= A.length) break;
A[odd] = A[odd] ^ A[even];
A[even] = A[odd] ^ A[even];
A[odd] = A[odd] ^ A[even];
}
return A;
}
}