一、题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
二、分析及代码
1. 辅助数组
(1)思路
由于牛客网在线编程系统中规定了奇数之间和偶数之间的顺序不能改变,因此无法采用《剑指offer》原书中从头、尾分别设计指针,采用类似快排的调整方法。
可以空间换时间,设计一个辅助数组,在遍历原数组的过程中,将偶数存入辅助数组,奇数放到目标位置。遍历完成后,再将辅助数组中的偶数依次拷入原数组的相应位置,完成顺序调整。
(2)代码
public class Solution {
public void reOrderArray(int [] array) {
if (array.length == 0)
return;
int oddIndex = 0, evenIndex = 0;
int [] evenArray = new int[array.length];
for (int i = 0; i < array.length; i++) {
if ((array[i] & 1) == 1)//奇数
array[oddIndex++] = array[i];
else//偶数
evenArray[evenIndex++] = array[i];
}
for (int i = 0; i < evenIndex; i++)
array[oddIndex++] = evenArray[i];
return;
}
}
(3)结果
运行时间:19ms,占用内存:8940k。
三、其他
暂无。