leetcode 75.颜色分类

LeetCode力扣 75. 颜色分类 冒泡排序法,计数法 75. 颜色分类 难度中等1190收藏分享切换为英文接收动态反馈 给定一个包含红色、白色和蓝色、共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] ... 阅读详情

leetcode 75.颜色分类

题目描述

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

注意:
不能使用代码库中的排序函数来解决这道题。

示例:

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

解题思路

方法一:两趟遍历法

给定的数组中只包含0,1,2三个数字,通过一次遍历把数组中每个数字的数量统计出来,然后二次遍历按照统计的数量把0,1,2依次填入数组中。

class Solution {
public:
    void sortColors(vector<int>& nums) {
        vector<int> colors(3, 0);    // 记录每个颜色出现的次数
        for(int i=0; i<nums.size(); i++){  // 一次循环
            colors[nums[i]] += 1;
        }
        // 二次循环,进行排序,按照0,1,2排序
        int index = 0;
        for(int i=0; i<3; i++){
            while(colors[i]){ // 当数字减少到零,表示该颜色填充完毕
                nums[index] = i;
                colors[i]--;
                index++; 
            }
        }
    }
};

方法二:三指针方法

定义三个指针来分别追踪0,1,2这三个数字,left追踪0、cur作为下标的移动(也可以说是追踪数字1),right追踪数字2。定义完了以后,分为三步

  • 当nums[cur] = 0的时候,交换nums[left]、nums[cur],同时left、cur同时向右移动一位
  • 当nums[cur] = 2的时候,交换nums[right]、nums[cur],只把right向左移动一位
  • 当nums[cur] = 1的时候,cur向右移动一位

那么当cur的值大于等于right的时候,遍历完成

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int left=0, cur=0, right=nums.size()-1;   // 定义三个指针
        while(cur<=right){
            int temp = nums[cur];
            if(nums[cur] == 0){				// 等于零的情况,交换,并同时移动left、cur
                nums[cur] = nums[left];
                nums[left] = temp;
                left++;
                cur++;
            }
            else if(nums[cur] == 2){        // 等于2的情况,交换,并移动right
                nums[cur] = nums[right];
                nums[right] = temp;
                right--;
            }
            else{                           // 等于1时,只操作cur向右移动
                cur++;
            }
        }
    }
};

欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步
在这里插入图片描述

【leetcode】75.颜色分类(多种解法,超详细图文解析) 75. 颜色分类 难度中等 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。 阅读详情

相关推荐

【中等】力扣算法题解析LeetCode75:颜色分类

本文介绍了如何在不使用库函数的情况下,原地对包含0、1、2的数组进行排序(荷兰国旗问题)。通过三指针法(left、right、current),将0交换到数组左侧,2交换到右侧,1保留在中间。算法仅需一趟扫描(时间复杂度O(n))和常数空间(空间复杂度O(1)),高效且直观。代码使用Java实现,并通过交换函数完成元素位置调整,确保排序正确性。

ylumwd的博客 858

75.颜色分类-力扣(LeetCode)

力扣-75题

weixin_48554146的博客 595

高斯投影坐标正反算算法(python)

高斯坐标正反算算法,在正算的时候,y的第一个数字表示是用几度带换算的,第二个数字和第三个数字表示带号。该程序是根据武汉大学出版社出版的第三版的《大地测量学基础》编写, 用于课程实验学习。

weixin_64338372的博客 4585

【分治】Leetcode 颜色分类

如果当前的nums[i] == 0,我们就让nums[++left] 和 nums[i++]位置上的数字做交换,这里的i是可以向前移动的,因为++left位置上的数字一定是1。如果nums[i] == 2, swap(nums[–right], nums[i])如果当前的nums[i] == 1,i++即可。

皮蛋的Bk 494

SAP BAPI调用避坑指南:处理MD61/MD62计划独立需求时,这些参数和返回值你必须检查

本文详细解析了SAP BAPI调用中处理MD61/MD62计划独立需求的关键参数和返回值检查要点,包括版本控制、日期类型和删除标记等核心参数设置,以及常见错误排查和高级调试技巧,帮助开发者高效管理需求计划数据。

weixin_30316097的博客 610

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析)

本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。

weixin_27219587的博客 475

27. 颜色分类_Python算法

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。#nums = list(nums) #原地修改不能进行转化。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。输入:nums = [2,0,2,1,1,0]输入:nums = [2,0,1]输出:[0,0,1,1,2,2]# 根据题目输入例子进行验证。输出:[0,1,2]

shengfuok123456的博客 527

ThingsKit物联网平台产品管理之物模型

物模型是ThingsKit物联网平台为产品定义的数据模型,用于描述产品的功能。本文介绍物模型相关概念和使用限制。

云腾五洲官方博客 1172

力扣75. 颜色分类 题解

力扣73. 颜色分类 想法:使用常数空间的一趟扫描算法。定义三个指针left,right,p。left作为左端点,right作为右端点,p初始值为0,移动p对nums[p]进行判断,为0则与nums[left]交换,交换后p++,left++ 。为2,则与nums[right]进行交换,注意这里不能交换完就p++ ,因为原本的nums[right]并未做出判断,交换后则需要再进行判断,随后进行相应的自加。 代码: void sortColors(int* nums, int numsSize){

qq_45836906的博客 486

KEIL-MDK代码美化神器:AStyle配置全攻略(附常用参数详解)

本文详细介绍了如何在KEIL-MDK中配置和使用AStyle代码格式化工具,包括基础参数设置、高级格式控制、团队协作方案以及KEIL深度集成技巧。通过合理的AStyle配置,开发者可以显著提升代码风格一致性,优化团队协作效率,特别适合嵌入式开发项目。

weixin_30505225的博客 146

华为OD机考真题 新系统 - 数列求值(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【数列求值】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【数列求值】多语言题解。

qq_45776114的博客 661

力扣LeetCode #75 颜色分类(SortColors)

- 题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 提示: n == nums.length 1 <= n <= 300 nums[i] 为 0、1 或 2 进阶: 你可以不使用代码库中的排序函数来解决这道题吗? 你能想出一个仅使用常数空间的一趟扫描算法吗? 来源:LeetCode - 示例 示例 1: 输入:nums = [2,0,2

weixin_49155948的博客 383

RH850 GreenHillSoftware Install

IDE一次链接到一个Compiler/Green Hills Debug Probe安装目录。如果您安装了IDE、编译器和绿山调试探测器软件,安装程序会将安装链接在一起。如果您只使用Advanced Install选项安装IDE,那么当您第一次启动它时,IDE会提示您链接到编译器和绿山调试探针安装*。如果您使用Advanced Install选项只安装编译器和绿山调试探针软件,安装程序会提示您将IDE的安装链接到新的编译器和绿山调试探针安装。

舊梦的博客 1212

【数组】力扣75题:颜色分类

建议在看题目之前先了解数组的具体知识点,可以看这里: [算法基础(二):数组知识点及题型讲解]

niexinyu0026的博客 917

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode 75 颜色分类

LeetCode 75 颜色分类 题目链接 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 简单计数题,直接用 mapmapmap 标记即可,AC代码如下: class Solution { public: void s

旺崽的博客 3909

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

leetcode75. 颜色分类

颜色分类

热爱C++和golang的学生 1407

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Leetcode】Leetcode 75.颜色分类

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

voidfaceless的博客 210

力扣75. 颜色分类

O(n),两次遍历总次数为2n,线性复杂度,时间消耗低。

2503_91570191的博客 1055

LeetCode第75题_颜色分类

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

qq_40263592的博客 1353

【LeetCode】75. 颜色分类

本文介绍了荷兰国旗问题的解法,要求将只含0、1、2的数组原地排序。核心方法是三指针分区算法:使用left、cur、right三个指针将数组分为0、1、2三个区域,通过交换元素实现单趟O(n)排序。相比计数排序需要两次遍历和快速排序的O(nlogn)复杂度,三指针算法在时间和空间上都是最优解。关键点在于处理2时保持cur不变以检查交换来的元素,确保正确分区。该算法适用于类似的三值分类问题。

qq_32019341的博客 1327

LeetCode-75 颜色分类

LeetCode-75 颜色分类 题目链接:LeetCode-75 题目大意:数组中包含0,1,2三种数字 将数组排序 不能用Arrays.sort()排序进行 解题思路:普通的排序就可以解决 但是这样做就浪费了这道题 我的思路是使用两个坐标left 和right 意义是当前处理的坐标 和处理完的“2”序列最前面的坐标 left从0开始 遇到1就保持现状不变并把left向右移动一位(保证了0在最...

鱼头的水题之路 219

《LeetCode力扣练习》第75题 颜色分类 Java

《LeetCode力扣练习》第75题 颜色分类 Java 一、资源 题目: 给定一个包含红色、白色和蓝色、共 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

XRT_knives的博客 361

LeetCode75 颜色分类

LeetCode75 颜色分类 题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 想法 可以参考快速排序,只是要处理相等的情况 而且不需要递归 代码实现 public class LeetCode75 { public static void main(String[] args) { int nums[]= {2,0,1}; LeetC

qq_45671761的博客 394

LeetCode 力扣 75. 颜色分类

题目描述(中等难度) 给一个数组,含有的数只可能 0,1,2 中的一个,然后把这些数字从小到大排序。 解法一 题目下边的 Follow up 提到了一个解法,遍历一次数组,统计 0 出现的次数,1 出现的次数,2 出现的次数,然后再遍历数组,根据次数,把数组的元素改成相应的值。当然我们只需要记录 0 的次数,和 1 的次数,剩下的就是 2 的次数了。 public void sortColors...

wind_liang的博客 992
上一篇: leetcode 6.Z字形变换
下一篇: vim复制粘贴(从系统粘贴到vim中,以及从vim中粘贴到系统中)
黑暗主宰
博客等级 码龄9年 72粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值