调整数组顺序使奇数位于偶数前面_JAVA_较难
调整数组顺序使奇数位于偶数前面
http://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593
辅助数组
- 使用辅助数组,保存偶数值
- 移动奇数值覆盖前面的zhi,再将辅助数组的偶数值复制回原数组
public class Solution { public void reOrderArray(int[] array) { int[] cache = new int[array.length]; int i = 0; // 保存偶数 for(int num : array) { if(num % 2 == 0) { cache[i++] = num; } } int j = 0; // 移动奇数 for(int num : array) { if(num % 2 == 1) { array[j++] = num; } } i = 0; // 复制偶数 while(j < array.length) { array[j++] = cache[i++]; } } }
逐位移动
- 遍历数组,碰到偶数值就记录个数j,每个奇数都要前移j位(不是覆盖)
public class Solution { public void reOrderArray(int[] array) { int[] cache = new int[array.length]; int even = 0; for(int i = 0; i < array.length; i++) { // 记录偶数个数 if((array[i] & 1) == 0) { even++; // 奇数前移even位 } else { int temp = array[i]; for(int j = i; j > i - even; j--) { array[j] = array[j - 1]; } array[i - even] = temp; } } } }