题解 | #调整数组顺序使奇数位于偶数前面#
调整数组顺序使奇数位于偶数前面
http://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b
算法思想:用一个标志位flag 记录以排好的奇数位置。遍历如果为奇数,则将奇数移到flag 后面一个位置。应为flag到该奇数之间都为偶数所以进行后移。注意一种特殊情况如果第一位为偶数,flag默认为0,之后需要flag++,再进行赋值。所以就会导致第一位为偶数的一直会在第一位,为了排除这种影响,我们需要对这种特殊情况特殊处理。
public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维数组 * @return int整型一维数组 */ public int[] reOrderArray (int[] array) { if(array.length==0) return array; //int[] ints = new int[]{}; // 上一个不是奇数的位置进行保留 int flag=0;// flag 存现已排好的奇数位置 int n=array.length; // 先后移再放 for(int k=0;k<n;k++){ if(array[k]%2!=0){ int temp=array[k]; if(k==0){ array[k]=temp; }else{ for(int j=k-1;j>flag;j--){ array[j+1]=array[j]; } flag++; array[flag]=temp; } }else{ //对于第一个为偶数的特殊处理 if(k==0){ flag=-1; } } } return array; } }