题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
第一种思路:
如果遇到奇数,前面有偶数,就将所有偶数依次向后移动一位,然后将奇数放在最前面偶数原来的位置,同时偶数标志位向后移动一位。如果奇数前面没有偶数,什么都不做;
如果遇到偶数,如果是第一次遇到偶数,将下标设为标志位,如果不是第一次遇到,什么都不做。
public class Solution {
public void reOrderArray(int [] array) {
int index=-1;
int tmp=0;
for(int i=0;i<array.length;i++){
if(array[i]%2==1){
if(i>index&index>=0){
tmp=array[i];
for(int j=i;j>index;j--){
array[j]=array[j-1];
}
array[index]=tmp;
index=index+1;
}
}else{
if(index<0){
index=i;
}
}
}
}
}
第二种思路:思路是将奇数和偶数分到两个数组,不过数组的容量不能确定。
public class Solution {
public void reOrderArray(int [] array) {
int[] odd=new int[array.length];
int[] even=new int[array.length];
int a=0;
int b=0;
for(int i=0;i<array.length;i++){
if(array[i]%2==1){
odd[a++]=array[i];
}else{
even[b++]=array[i];
}
}
for(int i=0;i<a;i++){
array[i]=odd[i];
}
for(int i=0;i<b;i++){
array[a++]=even[i];
}
}
}