1. 题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
2. 题目分析
- 第一个做法:以时间换空间,复杂度O(n²)
1. 遍历数组array,利用num来记录当前奇数的个数 2. 当遍历到奇数时,利用交换的思想,将此时的奇数交换至array[num]的位置 3. 最终,得到最后的结果
- 第二个做法:以空间换时间,复杂度O(n)
1. 开辟一个新的数组a,定义num1(代表array数组中奇数的个数),num2(代表a数组中偶数的个数) 2. 遍历数组array。如果是奇数,将其array[num1++],如果是偶数,将其a[num2++] 3. 最后,将a数组中的偶数转移到array数组中
3. 题目代码
- 第一个做法:以时间换空间,复杂度O(n²)
public void reOrderArray(int[] array) { int num = 0; int j = 0; int temp = 0; for (int i = 0; i < array.length; i++) { if (array[i] % 2 == 1) { j = i; while (j > num) { temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; j--; } num++; } } }
- 第二个做法:以空间换时间,复杂度O(n)
public void reOrderArray(int [] array) { int[] a = new int[100]; int num1 = 0; int num2 = 0; for(int i = 0; i < array.length; i++){ if(array[i] % 2 == 0){ a[num1++] = array[i]; }else{ array[num2++] = array[i]; } } for(int i = 0; i < num1; i++){ array[num2++] = a[i]; } }