标签:数组
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路
- 法一:最简单的方法就是把奇数和偶数按顺序挑出来,分别放到两个list里,最后再把偶数的list接到奇数list的末尾。
- 法二:若空间复杂度限制为O(1),用类冒泡排序法
参考代码
最简单的方法就是把奇数和偶数按顺序挑出来,分别放到vector里,最后再把偶数的vector接到奇数vector的末尾。
参考代码
方法一
注意:list加list是addAll()函数,如何遍历list集合,用foreach
import java.util.ArrayList;
public class ReOrderArray {
public void reOrderArray(int[] array) {
if(array.length == 0)
return;
ArrayList<Integer> l1 = new ArrayList<>();
ArrayList<Integer> l2 = new ArrayList<>();
for(int i=0; i<array.length; i++){
if(array[i] % 2 == 0)
l1.add(array[i]);
else
l2.add(array[i]);
}
l2.addAll(l1);
//没有这种写法
//array = l2.toArray();
for(int i=0; i<l2.size(); i++) {
array[i] = l2.get(i);
System.out.print(array[i]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {1,2,3,4};
ReOrderArray r = new ReOrderArray();
r.reOrderArray(array);
}
}
方法二
若有空间限制,可以使用类似于冒泡排序法,思想写法一样
public class Solution {
public void reOrderArray(int [] array) {
for(int i=0; i < array.length; i++){
for(int j=0; j<array.length-1-i; j++){
if(array[j] % 2 == 0 && array[j+1] % 2 != 0){
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
}
}
}