zoukankan      html  css  js  c++  java
  • java荷兰国旗问题

    荷兰国旗包含三种颜色:红、白、蓝。

    有三种颜色的球,算法的目标是将这三种球按颜色顺序正确地排列。它其实是三向切分快速排序的一种变种,在三向切分快速排序中,每次切分都将数组分成三个区间:小于切分元素、等于切分元素、大于切分元素,而该算法是将数组分成三个区间:等于红色、等于白色、等于蓝色。
    按颜色进行排序

    示例 1:
    
    输入:nums = [2,0,2,1,1,0]
    输出:[0,0,1,1,2,2]
    
    示例 2:
    输入:nums = [2,0,1]
    输出:[0,1,2]
    
    示例 3:
    输入:nums = [0]
    输出:[0]
    
    示例 4:
    输入:nums = [1]
    输出:[1]
     
    
    提示:
    n == nums.length
    1 <= n <= 300
    nums[i] 为 0、1 或 2
     
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/sort-colors
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    

    题目描述:

    给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

    此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

    public void sortColors(int[] nums) {
        int zero = -1, one = 0, two = nums.length;
        while (one < two) {
            if (nums[one] == 0) {
                swap(nums, ++zero, one++);
            } else if (nums[one] == 2) {
                swap(nums, --two, one);
            } else {
                ++one;
            }
        }
    }
    
    private void swap(int[] nums, int i, int j) {
        int t = nums[i];
        nums[i] = nums[j];
        nums[j] = t;
    }
    

    无意中发现了一位清华大佬的算法刷题笔记,关注公众号『勾玉技术』回复『清华算法』领取

  • 相关阅读:
    java类加载器与双亲委派机制详解
    JAVA数据库连接池
    使用vue脚手架(vue-cli)快速搭建项目
    安装Vue.js
    @Autowired的使用:推荐对构造函数进行注释
    图解排序算法(三)之堆排序
    快速排序思想
    TCP与UDP区别总结
    JDBC
    solr单机版安装与集群搭建教程
  • 原文地址:https://www.cnblogs.com/bronya0/p/14409409.html
Copyright © 2011-2022 走看看