题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
第一种思路:
如果遇到奇数,前面有偶数,就将所有偶数依次向后移动一位,然后将奇数放在最前面偶数原来的位置,同时偶数标志位向后移动一位。如果奇数前面没有偶数,什么都不做;
如果遇到偶数,如果是第一次遇到偶数,将下标设为标志位,如果不是第一次遇到,什么都不做。
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];
}
}
}
本文介绍了一种在保持奇数和偶数内部顺序不变的情况下,将整数数组中的所有奇数移动到数组前半部分,所有偶数移动到后半部分的算法。提供了两种实现方法:一是通过移动元素实现,二是使用双数组进行重构。
5952

被折叠的 条评论
为什么被折叠?



