思路:新建一个等长数组,首先统计奇数的个数,然后奇数指从0开始填充,偶数从奇数个数的末尾开始填数。然后再重新填回原来的数组中。
public class Solution {
public void reOrderArray(int [] array) {
if(array.length==0||array.length==1) return;
int oddCount=0,oddBegin=0;
int[] newArray=new int[array.length];
for(int i=0;i<array.length;i++){
if((array[i]&1)==1) oddCount++;//如果是奇数的话,最低位永远都是1
//偶数的话为零,这个点特别好
}
for(int i=0;i<array.length;i++){
if((array[i]&1)==1)
newArray[oddBegin++]=array[i];
//if((array[i]&1)==1){
//newArray[oddBegin]=array[i];这里是分两步计算了
//oddBegin = oddBegin+1;
}
else newArray[oddCount++]=array[i];
// else {
// newArray[oddCount]=array[i];
// oddCount = oddCount+1;
}
}
for(int i=0;i<array.length;i++){
array[i]=newArray[i];
}
}
}
文中求奇数偶数的时候并不是用常规的对2取余方法,,而是按位与1的方法、如果是奇数的话按位与1,最低位肯定是1。偶数则为零。