1题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题解
第一种思路:先把奇偶分拣出来,再整合回去,还要保证奇奇之间顺序一致,偶偶之间顺序一致,这样队列结构符合,但这种的缺陷是空间复杂度高
java中:LinkedList
add()添加元素
poll()弹出元素
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
public void reOrderArray(int [] array) {
//第一种:偶数存入一个队列,奇数存入另一个队列,然后先弹出奇数队列到数组,后弹出偶数队列的数
LinkedList<Integer> q_odd = new LinkedList<Integer>();
LinkedList<Integer> q_even = new LinkedList<Integer>();
int i;
//分拣存值
for(i=0; i<array.length; i++){
if(array[i]%2==0)
q_even.add(array[i]);
else q_odd.add(array[i]);
}
//数值回家
for(i=0; i<array.length; i++){
if(!q_odd.isEmpty()){
array[i] = q_odd.poll();//弹出
continue;
}
if(!q_even.isEmpty()){
array[i] = q_even.poll();
continue;
}
}
}
}
23 ms | 9424K |
设计到队列和栈的题,其实感觉用C++可能比较好实现