题解 | #调整数组顺序使奇数位于偶数前面(二)#
调整数组顺序使奇数位于偶数前面(二)
http://www.nowcoder.com/practice/0c1b486d987b4269b398fee374584fc8
方法一:记录奇数的数量,后方遇到奇数如果位置大于记录的位置,则与记录位置后面的一个偶数交换
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] reOrderArrayTwo (int[] array) {
//记录奇数数量
int odd = -1;
for(int i = 0; i < array.length; i++){
if(array[i] % 2 == 1){
if(i > ++odd){
int tmp = array[i];
array[i] = array[odd];
array[odd] = tmp;
}
}
}
return array;
}
}
方法二:利用双指针从数组两端开始遍历,从前向后遇到偶数暂停,从后向前遇到奇数暂停,然后交换此时的奇数和偶数
//双指针
int left = 0, right = array.length - 1;
while(left < right){
while(array[left] % 2 == 1) left++;
while(array[right] % 2 == 0) right--;
if(left < right){
int tmp = array[left];
array[left] = array[right];
array[right] = tmp;
}
}