题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
源代码:
//具体思路是:先判断数组中有多少个奇数n,同时把数组中的元素复制到临时数组中,然后遍历临时数组,当遇到奇数时,把奇数在当前数组中按序存放,当遇到偶数时,把偶数从当前数组的第n个位置开始存放,因为数组中的奇数只有n个。
空间复杂度是:O(n),时间复杂度是O(n)。
public class Solution {
public void reOrderArray(int [] array) {
int len=array.length;
int jicnt=0;
int [] tmp=new int[len];
if(len==0)
throw new RuntimeException("数组为空");
for(int i=0;i<len;i++){
if(array[i]%2!=0)
jicnt++;
tmp[i]=array[i];
}
int jiindex=0;
for(int i=0;i<len&&jiindex<jicnt;i++){
if(tmp[i]%2!=0){//为奇数的话
array[jiindex++]=tmp[i];
}else{
array[jicnt++]=tmp[i];
}
}
}
}