题目链接
题目描述
需要保证奇数和奇数,偶数和偶数之间的相对位置不变,这和书本不太一样。
解题思路
类似冒泡算法,i从后面开始遍历,每次确定i位置得到对应的偶数
public class Solution {
public void reOrderArray(int [] array) {
for (int i=array.length-1;i>=0;i--) {
for (int j=0;j<i;j++)
if (array[j]%2==0 && array[j+1]%2!=0) swap(array, j, j+1);
}
}
private void swap(int[] array, int i, int j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
创建新数组,查数
public void reOrderArray(int[] nums) {
// 奇数个数
int oddCnt = 0;
for (int x : nums)
if (!isEven(x))
oddCnt++;
int[] copy = nums.clone();
int i = 0, j = oddCnt;
for (int num : copy) {
if (num % 2 == 1)
nums[i++] = num;
else
nums[j++] = num;
}
}
private boolean isEven(int x) {
return x % 2 == 0;
}