import java.util.ArrayList;
import java.util.Arrays;
/**
* 面试题21:调整数组顺序使奇数位于偶数前面
* 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,
* 所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
*
* 输入:[1,2,3,4]
* 输出:[1,3,2,4]
*
* @author dengjie
* @create 2021-04-13 23:01
*/
public class Solution21 {
public static void main(String[] args) {
int[] arr = {1,2,3,4};
int[] ints = reOrderArrayTwo(arr);
System.out.println(Arrays.toString(ints));
}
/**
* 方法一:
* 两个list,一个存偶数,一个存奇数
* 时间复杂度O(n),空间复杂度O(n)
* @param array
* @return
*/
public static int[] reOrderArray (int[] array) {
// write code here
if (array == null || array.length == 0){
return array;
}
ArrayList<Integer> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
for (Integer num: array) {
if (num % 2 == 1){
list1.add(num);
}else {
list2.add(num);
}
}
int[] res = new int[array.length];
int i = 0;
for (Integer in: list1){
res[i++] = in;
}
for (Integer in: list2) {
res[i++] = in;
}
return res;
}
/**
* 方法二:使用冒泡排序思想,遇到偶数在前奇数在后的情况就交换
* 时间复杂度:O(n2),空间复杂度O(1)
* @param array
* @return
*/
public static int[] reOrderArrayTwo (int[] array) {
if (array == null || array.length == 0){
return array;
}
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-1-i; j++) {
if ((array[j] & 1) == 0 && (array[j+1] & 1) == 1){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
}
【剑指Offer】面试题21:调整数组顺序使奇数位于偶数前面
最新推荐文章于 2022-03-25 20:56:10 发布