题目:
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.

Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.

Note:
You are not suppose to use the library’s sort function for this problem.

思路:
不用标准库中的排序,将所有的0、1、2排好序。
方法1:如果当前位为0,将当前位保存在tmp中,前面所有的位后移一位,第一位为tmp,且i+1;如果当前位为1,直接i+1;如果当前位为2,将当前位开始到末尾赋给一个set,如果set的大小为1,也就是只有2,那么已经排序完毕,先delete,再break跳出循环结束,如果set大小不为1,将当前位保存在tmp中,后面所有的位前移一位,最后一位为tmp,此时i不变。
方法2:直接计算nums中的0、1、2的数量,然后再给nums赋值,这样更快,3ms。

代码1:

class Solution {
public:void sortColors(vector<int>& nums) {int len=nums.size();//计算nums的长度for(int i=0;i<len;){if(nums[i]==0){//如果当前位为0int tmp=nums[i];//将当前位保存在tmp中,for(int j=i;j>0;--j){//前面所有的位后移一位nums[j]=nums[j-1];}nums[0]=tmp;//第一位为tmp,且i+1++i;}else if(nums[i]==1){//如果当前位为1,直接i+1++i;}else{//如果当前位为2set<int> *remain = new set<int>;(*remain).insert(nums.begin()+i, nums.end());//将当前位开始到末尾赋给一个setif ((*remain).size() == 1){//如果set的大小为1,也就是只有2,那么已经排序完毕delete remain;//先delete,再跳出循环结束break;}int tmp = nums[i];//如果set大小不为1,将当前位保存在tmp中for (int j = i; j<len - 1; ++j){//后面所有的位前移一位nums[j] = nums[j + 1];}nums[len - 1] = tmp;//最后一位为tmp,此时i不变}}}
};

输出结果: 6ms

代码2:

class Solution {
public:void sortColors(vector<int>& nums) {int count0=0;int count1=0;int count2=0;int len=nums.size();for(int i=0;i<len;++i){//分别计算0、1、2的个数保存在count0、count1、count2中if(nums[i]==0){++count0;}else if(nums[i]==1){++count1;}else{++count2;}}for(int i=0;i<len;++i){//给nums赋值if(i<count0){//如果i比count0小,则当前位都为0nums[i]=0;}else if(i>=count0&&i<count0+count1){//如果i大于等于count0且i小于count0+count1nums[i]=1;//则当前位都为1}else{//剩下的都为2nums[i]=2;}}}
};

输出结果: 3ms

LeetCode 75. Sort Colors相关推荐

  1. LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)

    LeetCode 75. Sort Colors (python一次遍历,模拟三路快排) 题目分析: 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历. 由于只用把数字隔离开,很容易想到快排的 ...

  2. 【排序】LeetCode 75. Sort Colors

    LeetCode 75. Sort Colors Solution1: 参考自:<leetcode-cpp 答案> 由于0,1,2非常紧凑,首先想到计数排序(counting sort), ...

  3. [LeetCode]75.Sort Colors

    [题目连接] 75.Sort Colors [题目] Given an array with n objects colored red, white or blue, sort them so th ...

  4. LeetCode 75 Sort Colors(颜色排序)

    翻译 给定一个包括红色.白色.蓝色这三个颜色对象的数组.对它们进行排序以使同样的颜色变成相邻的,其顺序是红色.白色.蓝色.在这里,我们将使用数字0.1和2分别来代表红色.白色和蓝色. 原文 Given ...

  5. 个人记录-LeetCode 75. Sort Colors

    问题: Given an array with n objects colored red, white or blue, sort them so that objects of the same ...

  6. leetcode 75. Sort Colors | 75. 颜色分类(荷兰国旗问题,快速排序)

    题目 https://leetcode.com/problems/sort-colors/ 题解 快速排序3.0(随机快排+荷兰国旗技巧优化) 在arr[L-R]范围上,进行快速排序的过程: 1)在这 ...

  7. 75. Sort Colors - LeetCode

    Question 75. Sort Colors Solution 题目大意: 给一个数组排序,这个数组只有0,1,2三个元素,要求只遍历一遍 思路: 记两个索引,lowIdx初始值为0,highId ...

  8. Leetcode 075 Sort Colors

    题目连接:Leetcode 075 Sort Colors 解题思路:从左向右遍历,同时维护两个指针r和b,0~r位置上的元素为0,b~n-1位置上的为2.在遍历过程中,碰到0,放到r的位置:碰到2, ...

  9. LeetCode 75. Sort Colors--Python解法

    题目地址:Sort Colors - LeetCode Given an array with n objects colored red, white or blue, sort them in-p ...

最新文章

  1. linux6的关机快捷键是,桌面应用|Fedora GNOME 的常用快捷键
  2. 学习Kotlin(五)函数与Lambda表达式
  3. uniDBGrid导入数据库(转红鱼儿)
  4. 手机壁纸图片源码自动采集美图网
  5. BGP——权重选路(讲解+配置命令)
  6. java 多态_Java基础深度总结:多态
  7. 959. 由斜杠划分区域
  8. Intellij IDEA设置系列(四):各种乱码解决方案
  9. java进程的守护进程脚本
  10. jdbc连接带密码的access数据库
  11. 优科豪马冬季SUV轮胎G072的性能特点全解
  12. [Android]如何修改android模拟器的IMEI号
  13. Text file busy解决方法
  14. saas系统和传统服务器的区别,传统CRM与SaaS模式的区别
  15. AutoIt3常见问题解答
  16. MacOS获取辅助功能权限控制鼠标点击事件
  17. 线性代数笔记11——向量空间
  18. 初二因式分解奥数竞赛题_(完整)初中数学竞赛因式分解专题
  19. 2020年技术研发岗薪酬排名
  20. matlab计算联合熵,两个图像的相互信息和联合熵 – MATLAB

热门文章

  1. 注解java_Java注解教程及自定义注解
  2. Swin Transformer(W-MSA详解)代码+图解
  3. Bootstrap-组件-3
  4. python连接redis失败、积极拒绝_python-django-redis拒绝连接问题解决_20191121
  5. Hbuilder 左侧项目栏文件打开方式(单击?双击?) - 设置篇
  6. 单机android游戏排行榜,安卓单机手机游戏推荐_十大必玩单机手机游戏
  7. 兽语狗语文字在线加密解密PHP网站源码
  8. emlog简洁大气白色风格资源站模板源码
  9. 项目是采用目前比较流行的 SpringBoot/SpringCloudAlibaba构建新零售微服务电商项目
  10. WordPress企业一号主题模板