题目

75. 颜色分类

难度中等472

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

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

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

示例:

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

进阶:

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

解答

使用两个指针,0向前移动,2向后移动

void sortColors(vector<int>& nums)
{int left=0;                //指向待检查的左侧数int right=nums.size()-1;   //指向待检查的右侧数for(int i=0; i<=right; ++i) // 使用i遍历,上限为右侧指针right{if(nums[i]==0) swap(nums[i],nums[left++]); //若是0,与左侧的数交换,左指针++if(nums[i]==2) swap(nums[i--],nums[right--]); //若是2,与右侧数交换,注意索引回退一格(i--),右指针--}
}

复杂度分析

  • 时间复杂度 :由于对长度N的数组进行了一次遍历,时间复杂度为O(N)
  • 空间复杂度 :由于只使用了常数空间,空间复杂度为O(1) 。

官方答案:https://leetcode-cn.com/problems/sort-colors/solution/yan-se-fen-lei-by-leetcode/ 原理同上

//荷兰三色旗问题解void sortColors(vector<int>& nums)
{int left = 0, i = 0;int right = nums.size() - 1;  while (i <= right) {if (nums[i] == 0)      swap(nums[i++], nums[left++]);else if (nums[i] == 2) swap(nums[i], nums[right--]);else i++;}
}

算法笔记_面试题_7.颜色分类/荷兰三色旗问题相关推荐

  1. 第2章KNN算法笔记_函数classify0

    <机器学习实战>知识点笔记目录 K-近邻算法(KNN)思想: 1,计算未知样本与所有已知样本的距离 2,按照距离递增排序,选前K个样本(K<20) 3,针对K个样本统计各个分类的出现 ...

  2. 回溯 皇后 算法笔记_算法笔记_04_回溯

    设计思想: (1)适用:求解搜索问题和优化问题. (2)搜索空间:数,节点对应部分解向量,可行解在树叶上. (3)搜索过程:采用系统的方法隐含遍历搜索树. (4)搜索策略:深度优先,宽度优先,函数优先 ...

  3. 回溯 皇后 算法笔记_回溯算法:N皇后问题

    给「代码随想录」一个星标吧! ❝ 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便 ...

  4. 算法笔记_183:历届试题 九宫重排(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...

  5. 算法笔记_172:历届试题 波动数列(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度 ...

  6. 回溯 皇后 算法笔记_什么叫回溯算法,一看就会,一写就废

    什么叫回溯算法 对于回溯算法的定义,百度百科上是这样描述的:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回, ...

  7. 算法笔记_188:历届试题 危险系数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点 ...

  8. 回溯 皇后 算法笔记_算法笔记-回溯法

    (1)0-1背包问题 思路:构造一个二叉树,每个商品都有两种状态,要或者不要.如果要就在这个节点的左枝挂子节点,如果不要就在右节点挂子节点.如果全部商品都分配完状态之后就回溯,回溯到一个还有其他选择的 ...

  9. 算法笔记_图算法专题_关键路径 AOV网和AOE网

    关键路径 1.基本概念 1.AOV网:顶点活动网,是指用顶点表示活动,而用边集表示活动优先关系的有向无环图. 2.AOE网:边活动网,是指用带权的边集表示活动,而用顶点表示事件的有向无环图. AOV网 ...

  10. 【75】颜色分类--荷兰国旗问题

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

最新文章

  1. 微生物组学研究的可再现性、可重现性、稳定性与普适性
  2. 一个自带简易数据集的模拟线性分类器matlab代码——实验训练
  3. android 插桩工具,Android Asm 插桩 教学项目
  4. [leetcode] 3.无重复字符的最长子串
  5. C#在Linux上的开发指南
  6. PWN-PRACTICE-BUUCTF-8
  7. android如何适配平板,适用于平板电脑、大屏设备和可折叠设备的自适应布局
  8. 《[深入浅出 C#] (第3版)》 - 学习笔记
  9. Linux su和sudo命令的区别,并获得root权限
  10. mysql 分区 mycat 分片_Mysql系列六:(Mycat分片路由原理、Mycat常用分片规则及对应源码介绍)...
  11. linux系统中make install 时指定安装路径
  12. 【Unity3D】游戏开发数学基础
  13. commit翻译中文_commit的意思在线翻译,解释commit中文英文含义,短语词组,音标读音,例句,词源,同义词【澳典网ODict.Net】...
  14. html中样式属性有哪些,css字体样式属性有哪些?
  15. RAKsmart高防服务器防御形式解析
  16. 企业集群平台架构设计与实现--LVS篇(二)
  17. FileInfo,DirectoryInfo
  18. Stata重复与去重
  19. 计算机word插图教案,中学信息技术《配插图》教案
  20. plsql-数据查询(二、条件查询)

热门文章

  1. jsp include参数传送接收与应用
  2. JavaWeb将图片显示在浏览器中
  3. IOCAutofac与ORMEntityFramwork的联系--单例模式
  4. 你知道军装照H5浏览了多少次吗? 10亿
  5. vue-学习笔记-基础1
  6. Struts2 中的值栈的理解
  7. Razor基础语法简介
  8. asp.net 打印控件之报表
  9. C#基础知识之读取xlsx文件Excel2007
  10. 每天一道剑指offer-删除链表中的 重复结点