题目描述

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

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

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

示例:

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

进阶:

  • 一个直观的解决方案是使用计数排序的两趟扫描算法。
    首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
  • 你能想出一个仅使用常数空间的一趟扫描算法吗?

解题思路

用双指针的思想,维护左右指针分别指向数组首尾,对数组从左向右进行遍历:

  • 若遇到0,则与左指针指向元素交换,并将左指针右移一位
  • 若遇到2,则与右指针指向元素交换,并将右指针左移一位,因为交换过来的元素仍可能为2,所以再次对此元素进行判断

代码

 1 class Solution {
 2 public:
 3     void sortColors(vector<int>& nums) {
 4         int right = nums.size() - 1, left = 0;
 5         for(int i = 0; i <= right; i++){
 6             if(nums[i] == 0)
 7                 swap(nums[i], nums[left++]);
 8             else if(nums[i] == 2){
 9                 swap(nums[i], nums[right--]);
10                 i--;
11             }
12         }
13     }
14 };

转载于:https://www.cnblogs.com/wmx24/p/9542659.html

LeetCode 75. 颜色分类(Sort Colors)相关推荐

  1. leetcode系列-颜色分类(sort colors)

    分类:array 难度:medium 颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 ...

  2. LeetCode - 75 颜色分类

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

  3. [Swift]LeetCode75. 颜色分类 | Sort Colors

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. 算法系列——颜色分类(Sort Colors)

    题目描述 题目链接:https://leetcode-cn.com/problems/sort-colors/ Given an array with n objects colored red, w ...

  5. leetcode —— 75. 颜色分类

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

  6. Leetcode 75. 颜色分类 (每日一题 20210817)

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

  7. leetcode 75. 颜色分类(双指针)

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

  8. LeetCode 75 颜色分类

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

  9. 【leetcode】75.颜色分类(多种解法,超详细图文解析)

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

最新文章

  1. iOS 生成二维码/条形码
  2. 安波副教授:分布式人工智能进展与趋势
  3. Windows中的路由表和默认网关
  4. 【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )
  5. 最新版AnyDbTest数据库单元测试工具的下载地址
  6. Bitbucket Pipelines在Atlassian的Bitbucket云上提供持续交付功能
  7. php mongodb连接数据库,PHP下 Mongodb 连接远程数据库的实例代码
  8. MVP群聊某美国公司的应聘试题(压死九个还是一个)
  9. 位向量(bit vector)(算法导论第十一章11.1-2)
  10. 商务计算机的购置方案,电子采购方案的实施.ppt
  11. 20_python基础—面向对象-私有属性和私有方法
  12. java checker_java 英文单词纠正校验框架(Word Checker)
  13. 基于mfc的图形学实例_前端图形学(二十)——退后!!我要开始进入3D世界了...
  14. Windows 7 的一些使用技巧
  15. 三、定义主从实体基类
  16. lopatkin俄大神精简中文系统Windows 10 Enterprise 2016 LTSB 14393.577 x86-x64 ZH-CN PIP
  17. 2022-2027年中国双摄像头手机行业发展监测及投资战略研究报告
  18. 多多客api_订多多提供API
  19. Flink 实时数仓伪分布虚拟机 (所有组件部署完成)
  20. esd win10 /win8 最简单快速的安装方法 双系统、vhd、wimboot+VHD

热门文章

  1. Erlang--热更新
  2. linux命令---查找文件中的内容
  3. SVN项目锁定解决方案
  4. 关于火狐(firefox4)
  5. 一个普通80后的IT Pro去溜冰的感慨
  6. 致所有IT工程师的信(网络工程师的发展方向)
  7. 田志刚:智慧的员工,个人知识管理
  8. spring boot跨域问题
  9. Qt ffmpeg环境搭建
  10. 数据结构-王道2017-第3章 栈和队列-队列