题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
输入输出样例
输入:[1,2,3,4,5,6,7]
输出:[1,3,5,7,2,4,6]
题解
这一道题和之前在 LeetCode上做过的不太一样。LeetCode题目链接,leetcode上的题目不需要考虑奇数和偶数之前的相对顺序。
这一道题需要考虑相对顺序,看到这一点马上想到了使用稳定的排序方式,之前用的快速排序在这里是用不了的。
所以可是使用冒泡、归并、插入排序等
结果这样就陷入了一个先入为主的判断了,我们刷题是为了什么,不是为了挑战自己,而是让自己面对面试官的时候有话说。
所以,我们还是先使用最简单的方式,以空间换时间,难的那种方式,有的是人研究,到时候选一种学习一下就好了。
代码:
public class Solution {
public void reOrderArray(int [] array) {
// 新建一个等长的数组
int[] ret = new int[array.length];
int oddCount = 0;
for(int num:array)
if((num&1) == 1){
oddCount++;
}
int
odd = 0,
even = oddCount;
for(int num:array){
if((num & 1) == 1)
ret[odd++] = num;
else
ret[even++] = num;
}
// 覆盖原数组
for(int i=0; i<array.length; i++){
array[i] = ret[i];
}
}
}