当前位置: 首页 > article >正文

Leecode热题100-75.颜色分类

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

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

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]

提示:

  • n == nums.length
  • 1 <= n <= 300
  • nums[i] 为 01 或 2

进阶:

  • 你能想出一个仅使用常数空间的一趟扫描算法吗?

写就写进阶的解,这还不简单,直接上代码,看不懂可以私信或评论,第一时间解答

class Solution {
    /**这个题目也是听起来比较唬人,但是这个仔细想想如果按照数字来看,不就是红色最小,白色居中,蓝色最大吗
    这是啥问题?荷兰国旗啊,下面我们用荷兰国旗问题解一下,这就是荷兰国旗里的Partition */
    public void sortColors(int[] nums) {
        /**如果就一个那就直接返回吧,没啥可操作的*/
        if(nums.length == 1) {
            return;
        }
        /**开始进行划分,redLast表示确定的红的最后一个位置,目前还没有,blueFirst表示确定的蓝色的第一个位置,目前也还没有*/
        int redLast = -1;
        int blueFirst = nums.length;
        int cur = 0;
        while(cur < blueFirst) {
            /**等于的不管 */
            if(nums[cur] == 1) {
                cur ++;
                /**如果是0和红色的最后一个位置的下一个交换,扩充红色区,因为换的是之前的位置,所以这里cur不用验证,也直接++ */
            } else if(nums[cur] == 0) {
                swap(nums, cur++, ++redLast);
            } else {
                /**如果是2,就和蓝色的最后一个位置的前一个交换,扩充红色区,但是这个是从后面缓过来的,需要看看*/
                swap(nums, cur, --blueFirst);
            }
        }
    }

    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}


http://www.kler.cn/news/331193.html

相关文章:

  • 【AndroidStudio】关于AndroidStudio的常见控件TextView和Button
  • Vue2(十三):路由
  • Java文件上传同时传入JSON参数
  • 软件工程的详细学习要点和学习方向
  • git commit -am 仅提交已修改文件
  • 怎么绕开华为纯净模式安装软件
  • 机器学习篇-day02-KNN算法实现鸢尾花模型和手写数字识别模型
  • Pikachu- SQL Inject - http header 头注入
  • 《Linux从小白到高手》理论篇(六):Linux软件安装一篇通
  • Leecode SQL 184. Department Highest Salary 找出tie
  • 基于STM32的数字温度传感器设计与实现
  • 测试面试题:请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试
  • 影响 Linux、Unix 系统的 CUPS 漏洞可导致 RCE
  • Spring Boot与观察者模式实现数据同步更新机制
  • vue访问组件的数据和方法
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset(模拟实现)
  • 33. java快速排序
  • 探索Python新境界:funboost库揭秘
  • `git fetch` 检查更新
  • Unity2017在安卓下获取GPS位置时闪退的解决办法