import java.util.Arrays;
class Solution {
public static void main(String[] args) {
System.out.println(Arrays.toString(oddEvenHandle(new int[]{2, 2, 3})));
System.out.println(Arrays.toString(oddEvenHandle(new int[]{1, 2, 3, 4})));
System.out.println(Arrays.toString(oddEvenHandle(new int[]{1, 2, 3, 4, 4})));
System.out.println(Arrays.toString(oddEvenHandle(new int[]{1, 2, 3, 4, 5})));
System.out.println(Arrays.toString(oddEvenHandle(new int[]{1, 2, 3, 4, 5, 6})));
System.out.println(Arrays.toString(oddEvenHandle(new int[]{1, 2, 3, 4, 5, 6, 7})));
System.out.println(Arrays.toString(oddEvenHandle(new int[]{1, 2, 3, 4, 5, 6, 7, 8})));
System.out.println(Arrays.toString(oddEvenHandle(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 8})));
System.out.println(Arrays.toString(oddEvenHandle(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 8, 8})));
}
private static int[] oddEvenHandle(int[] array) {
if (array == null || array.length == 0) {
return array;
}
int oddCount = 0, evenCount = 0;
for (int ele : array) {
if (ele % 2 == 0) {
evenCount++;
} else {
oddCount++;
}
}
if (Math.abs(oddCount - evenCount) > 1) {
throw new IllegalArgumentException(String.format("oddCount = %d, evenCount = %d", oddCount, evenCount));
}
boolean oddHead = false;
if (oddCount >= evenCount) {
oddHead = true;
}
int oddPoint = 0, evenPoint = 0;
for (int i = 0; i < array.length; i++) {
if (oddHead) {
if (i % 2 == 0) {
// 奇数
if (array[i] % 2 == 0) {
if (oddPoint < i) {
oddPoint = i;
}
while (array[oddPoint] % 2 == 0) {
oddPoint++;
}
swap(array, i, oddPoint);
}
} else {
// 偶数
if (array[i] % 2 == 1) {
if (evenPoint < i) {
evenPoint = i;
}
while (array[evenPoint] % 2 == 1) {
evenPoint++;
}
swap(array, i, evenPoint);
}
}
} else {
if (i % 2 == 0) {
// 偶数
if (array[i] % 2 == 1) {
if (evenPoint < i) {
evenPoint = i;
}
while (array[evenPoint] % 2 == 1) {
evenPoint++;
}
swap(array, i, evenPoint);
}
} else {
// 奇数
if (array[i] % 2 == 0) {
if (oddPoint < i) {
oddPoint = i;
}
while (array[oddPoint] % 2 == 0) {
oddPoint++;
}
swap(array, i, oddPoint);
}
}
}
}
return array;
}
private static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
原文:https://www.cnblogs.com/optor/p/13185029.html