版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/littlehaes/article/details/91411243
welcome to my blog
剑指offer面试题21(java版):调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
笔记
- 数组问题, 输入的数组长度可以为0, 这并不是异常
- java中函数能作为参数吗? (试试内部类)
下面这段代码没有保证奇数和奇数, 偶数和偶数之间的相对会改变
public class Solution {
public void reOrderArray(int [] array) {
// input check
if(array.length < 1)
throw new RuntimeException("invalid input");
// execute
int pStart = 0;
int pEnd = array.length - 1;
while(pStart < pEnd){
while(pStart < pEnd && array[pStart]%2==1) // 当array[pStart]能够待在数组靠前的部分时,向后移动pStart,直到array[pStart]不能待在数组的靠前部分
pStart++;
while(pStart < pEnd && array[pEnd]%2==0) // 当array[pEnd]能够待在数组靠后的部分时,向前移动pEnd,直到array[pEnd]不能待在数组的靠后部分
pEnd--;
if(pStart < pEnd){
int temp = array[pStart];
array[pStart] = array[pEnd];
array[pEnd] = temp;
}
}
}
}
保证奇数和奇数, 偶数和偶数之间相对顺序的代码
public class Solution {
public void reOrderArray(int [] array) {
// input check 其实不用健壮性检查, 数组问题,可以输入长度为0的数组!
//if(array.length < 1)
// return null;
// execute
int oddCnt =0;
int evenCnt = 0;
int[] arrayEven = new int[array.length];
for(int i=0; i<array.length; i++){
if(array[i]%2==1)
array[oddCnt++] = array[i];
else
arrayEven[evenCnt++] = array[i];
}
evenCnt = 0;
for(int i=oddCnt; i<array.length; i++) // oddCnt是第一个偶数的索引
array[i] = arrayEven[evenCnt++];
}
}