题目链接

牛客网

题目描述

需要保证奇数和奇数,偶数和偶数之间的相对位置不变,这和书本不太一样。

解题思路

类似冒泡算法,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;
}