
方法一 两个队列,一个放奇数,一个放偶数
import java.util.*;
public class Solution {
public int[] reOrderArray (int[] array) {
if(array == null || array.length == 0) {
return array;
}
Queue<Integer> jishu = new LinkedList<>();
Queue<Integer> oushu = new LinkedList<>();
for(int i = 0; i < array.length; i++) {
if(array[i] % 2 == 0) {
oushu.offer(array[i]);
}else{
jishu.offer(array[i]);
}
}
int k = 0;
while(!jishu.isEmpty()) {
array[k] = jishu.poll();
k++;
}
while(!oushu.isEmpty()) {
array[k] = oushu.poll();
k++;
}
return array;
}
}
方法二 双指针
import java.util.*;
public class Solution {
public int[] reOrderArray (int[] array) {
if(array == null || array.length == 0) {
return array;
}
int[] num = new int[array.length];
int arrayHead = 0;
int arrayTail = array.length - 1;
int numHead = arrayHead;
int numTail = arrayTail;
while(arrayHead < array.length && arrayTail >= 0) {
if(array[arrayHead] % 2 == 1) {
num[numHead] = array[arrayHead];
numHead++;
}
arrayHead++;
if(array[arrayTail] % 2 == 0) {
num[numTail] = array[arrayTail];
numTail--;
}
arrayTail--;
}
return num;
}
}
方法三 不生成额外空间插入排序思想
import java.util.*;
public class Solution {
public int[] reOrderArray (int[] array) {
if(array == null || array.length == 0) {
return array;
}
for(int i = 1; i < array.length; i++) {
for(int j = i; j > 0; j--) {
if(array[j] % 2 == 1 && array[j - 1] % 2 == 0) {
swap(array, j, j - 1);
}
}
}
return array;
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}