JZ13 调整数组使奇数位于偶数前面,两种解法
调整数组顺序使奇数位于偶数前面
http://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593
解法一:愚蠢的复制粘贴, 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; } }