题目描述
需要保证奇数和奇数,偶数和偶数之间的相对位置不变,这和书本不太一样。
解题思路
新建数组
方法一:创建一个新数组,时间复杂度 O(N),空间复杂度 O(N)。
public class Solution {
public void reOrderArray(int [] array) {
int countji = 0;
for(int i : array) {
if(!iso(i))
countji++;
}
int[] copy = array.clone();
int i = 0, j = countji;
for(int n : copy) {
if(n % 2 == 1)
array[i++] = n;
else
array[j++] = n;
}
}
private boolean iso(int n) {
return n % 2 == 0;
}
}
冒泡 时间换空间
方法二:使用冒泡思想,每次都当前偶数上浮到当前最右边。时间复杂度 O(N2),空间复杂度 O(1),时间换空间。
public class Solution {
public void reOrderArray(int [] array) {
int len = array.length;
for(int i = len-1; i > 0; i--) {
for(int j = 0; j < i; j++) {
if(iso(array[j]) && !iso(array[j+1]))
swap(array, j, j+1);
}
}
}
// 判断偶数
private boolean iso(int n) {
return n%2 == 0;
}
// 交换
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}