解法一:愚蠢的复制粘贴, 21 ms
public class Solution {
public void reOrderArray(int [] array) {
if(array==null||array.length<2) return;
int[] ans=new int[array.length];
int curr=0;
for(int i=0; i<array.length; i++){
if(array[i]%2==1){
ans[curr++]=array[i];
}
}
for(int i=0; i<array.length; i++){
if(array[i]%2==0){
ans[curr++]=array[i];
}
}
//array=ans;只是让array的指针拷贝指向ans,没有意义
//必须改变array指针对应的内容才行
System.arraycopy(ans,0,array,0,array.length);
return;
}
}
解法二:成块搬运偶数段,11 ms
public class Solution {
public void reOrderArray(int [] array) {
if(array==null||array.length<2) return;
int j=0;//第一个偶数出现的位置,在这之前都是奇数
int i=0;//遍历计数
int n=array.length;
while(i<n&&array[i]%2==1) i++;
j=i;//找到原数组的第一个偶数位置
while(i<n){
while(i<n&&array[i]%2==0) i++;
//以上循环过后显然位置[j,i-1]都是偶数,第i位为奇数
if(i==n) break;
int t=array[i];
//把位置[j,i-1]的偶数复制到位置[j+1,i]去
System.arraycopy(array,j,array,j+1,i-j);
//再把第i位的奇数放在第j位
array[j]=t;
j++; i++;
}
return;
}
}