P104对应代码,基本思想,
public class Solution {
public void reOrderArray(int [] array) {
if(array==null||array.length==0)
return;
int index1=0;
int index2=array.length-1;
while(index1<index2){
if((array[index1]&1)==0){ //若index1为偶数
if((array[index2]&1)==1){ //若index2为奇数,则交换
int temp=array[index1];
array[index1]=array[index2];
array[index2]=temp;
index1++;
index2--;
}else
index2--; //若index2为偶数,则左移
}else
index1++;//若index1为奇数,则左移
}
}
}
测试用例:[1,2,3,4,5,6,7]
对应输出应该为:[1,3,5,7,2,4,6]
你的输出为:[1,7,3,5,4,6,2]
结果不对
另一种思路,创建一个新数组
时间复杂度为O(n),空间复杂度为O(n)的算法
/*
整体思路:
首先统计奇数的个数
然后新建一个等长数组,设置两个指针,奇数指针从0开始,偶数指针从奇数个数的末尾开始 遍历,填数
*/
public class Solution {
public void reOrderArray(int [] array) {
if(array==null||array.length==0)
return;
int index1=0;
int index2=0;
for(int i=0;i<array.length;i++){
if((array[i]&1)==1)
index2++;
}
int[] newArray=new int[array.length];
for(int i=0;i<array.length;i++){
if((array[i]&1)==0)
newArray[index2++]=array[i];
else
newArray[index1++]=array[i];
}
for(int i=0;i<array.length;i++){
array[i]=newArray[i];
}
}
}