《剑指Offer》21. 调整数组顺序使奇数位于偶数前面

题目链接

牛客网

题目描述

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

解题思路

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

相关推荐

淬月星辉:专利是什么?至少描述一下吧,然后把什么计算机二级、普通话这种拉低格调的证书删掉,不然hr以为你没东西写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务