解法一:愚蠢的复制粘贴, 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;
    }
}