空间换时间,使用两个指针的思想,节省时间,从头遍历array[]的时候,指针一从头开始收集奇数,按顺序放到a[]的头部;同理,指针二从数组尾巴开始收集偶数,按顺序(倒着依次放)放到a[]的尾部。花一次遍历的时间,同时处理奇数和偶数。
这样就可以得到一个前面是按顺序放好的奇数,后面也是按顺序放好的偶数的一个数组a[],最后再复制给array[]。
public class Solution { public void reOrderArray(int [] array) { if(array.length <= 1){ return; } int a[] = new int[array.length]; int oddNum = 0; //记录新数组奇数摆放的位置 int evenNum = array.length - 1; //记录新数组偶数摆放的位置 for(int i = 0; i < array.length; i++){ //遍历数组时,把遍历到的奇数一个个地按顺序放到前面 if((array[i] & 1) == 1){ a[oddNum] = array[i]; oddNum++; } if((array[array.length - i - 1] & 1) == 0){ //遍历数组时,把遍历到的偶数一个个地按顺序放到后面 a[evenNum] = array[array.length - i - 1]; evenNum--; } } for(int i = 0; i < array.length; i++){ array[i] = a[i]; } } }