代码编织梦想

题目

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

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

示例 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]

题解

class Solution {
    public void sortColors(int[] nums) {
        int len=nums.length;
        //快速排序
        //[0,zeros),[zeros,two),[two,len-1]一开始的三个指针要保证区间为0
        //最终的终止条件是i与two相同
        if(len<2){
            return;
        }
        int zeros=0;
        int i=0;
        int two=len;
        while(i<two){
            if(nums[i]==0){
                swap(nums,i,zeros);
                i++;
                zeros++;
            }else if(nums[i]==1){
                i++;
            }else{
                two--;
                swap(nums,i,two);
                //此处不需要i++,two指针先前移,再交换,此时two指向的是一个新的小数,交换过后i指向的也是一个新的小数,需要继续判断,所以不需要移动i
            }
        }
    }
    private void swap(int[] nums,int index1,int index2){
        int temp=nums[index1];
        nums[index1]=nums[index2];
        nums[index2]=temp;
    }
}

笔记:

1、注意交换前后指针移动的情况。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/codrab/article/details/118817404

leetcode 75 分类颜色_czj1992czj的博客-爱代码爱编程

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意:不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直

leetcode 75. 分类颜色_bendaai的博客-爱代码爱编程

把0和2往两端换。l保存下一个0的位置【可能正好和搜索位置相同,也可能是1】,r保存下一个2的位置 class Solution { public: void sortColors(vector<int>

[leetcode]python实现-75.分类颜色_神不烦的博客-爱代码爱编程

75.分类颜色 描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色

leetcode 75. 颜色分类(c++)_durablehumor的博客-爱代码爱编程

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代

leetcode 75. 颜色分类(c++、python)_我很忙2010的博客-爱代码爱编程

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观

leetcode-python-75. 颜色分类_暴躁老哥在线刷题的博客-爱代码爱编程

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的

leetcode 75.颜色分类-爱代码爱编程

leetcode 75.颜色分类 题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [

Java实现 LeetCode 75 颜色分类-爱代码爱编程

75. 颜色分类 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2]

75颜色分类-爱代码爱编程

链接地址:https://leetcode-cn.com/problems/sort-colors/ 这道题目看起来简单,实际由于规定了各种各样的条件,不能采用传统的排序算法来做,否则报超时。实际上这道题目也是用索引指针来做,需要利用一些规律。   同时,通过让红色指针不断循环下去,来进行判断,直到红色指针的索引大于紫色指针方可进行中断循环。

Leetcode 75. 颜色分类-爱代码爱编程

Leetcode 75. 颜色分类 1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/sort-colors/   本质上就是一个排序问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、

75. 颜色分类(图解)-爱代码爱编程

75. 颜色分类(图解) 题目 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,

leetcode题解75-颜色分类-爱代码爱编程

问题描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 解

75. 颜色分类(C++实现)-爱代码爱编程

文章目录 题目思路--三指针 题目 题目链接:75. 颜色分类) 思路–三指针 其实颜色分类就是对 0 1 2 这三个数字进行排序,但是排序都是有效率之分的,我们希望可以通过一种高效的方法去排序这三个数字,而不希望直接调用排序函数去排序! 思考以下: nums = [2,0,2,1,1,0] 要排序改数组,那么结果为[0,0,1,1,

LeetCode每日一题(22年1月27日-2月5日)-爱代码爱编程

目录(每日一题) 2047. 句子中的有效单词数1996. 游戏中弱角色的数量1765. 地图中的最高点884. 两句话中的不常见单词1342. 将数字变成 0 的操作次数1763. 最长的美好子字符串2000. 反转单词前缀1414. 和为 K 的最少斐波那契数字数目1725. 可以形成最大正方形的矩形数目1219. 黄金矿工 2047. 句

力扣75——颜色分类_书架上摆满了书,相邻颜色不同-爱代码爱编程

原题 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不