美文网首页
荷兰国旗问题

荷兰国旗问题

作者: 今天不想掉头发 | 来源:发表于2019-08-19 19:24 被阅读0次

荷兰国旗问题:给定一个数num,将数组中划分成3部分,小于num的部分,等于num的部分,大于num的部分

例题:一个数组只有0,1,2三个数,问遍历一遍怎么完成排序,要求空间复杂度为O(1)

/**
     * 将数组分成三个区域,0,1,2,从头开始遍历
     * 如果当前数字是2,则和最后面hi交换;
     * 如果当前数字是0,则和前面的lo交换;
     * 如果当前数字是1,则直接++即可
     * @param nums
     */
    public static void sort(int[] nums) {
        int n = nums.length;
        int lo = -1, cur = 0, hi = n - 1;
        while (cur < hi) {
            if (nums[cur] == 2) {
                swap(nums, cur, hi--);
            } else if (nums[cur] == 1) {
                cur++;
            } else {
                swap(nums, cur++, ++lo);
            }
        }
    }

    public static void swap(int[] nums, int m, int n) {
        int tmp = nums[m];
        nums[m] = nums[n];
        nums[n] = tmp;
    }
    public static void main(String[] args) {
        int[] nums = {2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 0, 0, 2};
        sort(nums);
        System.out.println(Arrays.toString(nums));
    }

相关文章

  • sort-colors

    荷兰国旗问题

  • 荷兰国旗问题

    给定一个数组,元素只有三种取值:0, 1, 2。分别代表三种颜色红白蓝。设计函数调整数组,使得数组按照0,1,2 ...

  • 荷兰国旗问题

    荷兰国旗问题:给定一个数num,将数组中划分成3部分,小于num的部分,等于num的部分,大于num的部分 例题:...

  • 荷兰国旗问题

    1.荷兰国旗问题 传入num 数组中大于num的数放左边 小于num的数放右边 等于num的数 放中间 1....

  • 荷兰国旗问题

    荷兰国旗问题 1、问题 荷兰国旗是由红白蓝3种颜色的条纹拼接而成,如下图所示: 假设这样的条纹有多条,且各种颜色的...

  • 【算法】快速排序及优化

    一、荷兰国旗问题 在讲快速排序前,我们先来看看荷兰国旗问题。题目如下: 其实,这就是快排的partition过程,...

  • 【数组】--荷兰国旗问题

    问题:现有红,白,蓝三个不同颜色的小球,乱序排列在一起,请重新排列这些小球,使得红白蓝三色的同颜色球在一起。红白蓝...

  • 荷兰国旗问题(颜色排序问题)

    版权声明:本文为博主原创文章,转载请注明出处。个人博客地址:https://yangyuanlin.club欢迎来...

  • 算法—数组:荷兰国旗问题

    tips:本文章内容来自《程序员编程艺术:面试和算法心得》给定一个字符串里面只有"R" "G" "B" 三个字符,...

  • 9. 荷兰国旗问题

    题意:把n个红、白、蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两球的方式,使得从左到右小球的颜色依次...

网友评论

      本文标题:荷兰国旗问题

      本文链接:https://www.haomeiwen.com/subject/djdesctx.html