ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

解题思路-LeetCode第75题:颜色分类

2021-02-05 22:00:34  阅读:157  来源: 互联网

标签:P0 P1 示例 nums 75 解题 位置 元素 LeetCode


解题思路-LeetCode第75题:颜色分类
题目描述:
给定一个包含红色、白色和蓝色,一共 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]

解题思路:
定义两个指针P0,P1(或者说是数组索引/下标),用于指示当前已经排序的一系列0或1写到的位置。P1始终>=P0
再定义一个变量,指向当前考察的位置。当前考察的数字为2,则什么都不做,继续向后推进;当前数字为0时,目标是把这个0写入已经排好序的一系列连续0的末尾。这个时候要考虑在此之前是否已经写入过1。
(1)没写过时,P1 == P0,此时只要交换P0和当前考察位置的元素即可;
(2)之前写过1时,也是先交换(1)中的元素,此时0已经写到正确位置,但有一个1被换到后面去了,此时要再进行一次交换,把换到后面的1换到P1指向的位置。最终的结果等价于:往一串连续的0和1里面插了一个0,插入的位置后面的1往后顺延一个位置,并且最后一个1会挤掉后面一个元素,把它挤到当前考察的位置,且这个元素必定为2

代码如下:
在这里插入图片描述
提交后,通过。

标签:P0,P1,示例,nums,75,解题,位置,元素,LeetCode
来源: https://blog.csdn.net/weixin_48153141/article/details/113704344

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有