算法笔记_面试题_7.颜色分类/荷兰三色旗问题
题目
75. 颜色分类
难度中等472
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 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.颜色分类/荷兰三色旗问题相关推荐
- 第2章KNN算法笔记_函数classify0
<机器学习实战>知识点笔记目录 K-近邻算法(KNN)思想: 1,计算未知样本与所有已知样本的距离 2,按照距离递增排序,选前K个样本(K<20) 3,针对K个样本统计各个分类的出现 ...
- 回溯 皇后 算法笔记_算法笔记_04_回溯
设计思想: (1)适用:求解搜索问题和优化问题. (2)搜索空间:数,节点对应部分解向量,可行解在树叶上. (3)搜索过程:采用系统的方法隐含遍历搜索树. (4)搜索策略:深度优先,宽度优先,函数优先 ...
- 回溯 皇后 算法笔记_回溯算法:N皇后问题
给「代码随想录」一个星标吧! ❝ 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便 ...
- 算法笔记_183:历届试题 九宫重排(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...
- 算法笔记_172:历届试题 波动数列(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度 ...
- 回溯 皇后 算法笔记_什么叫回溯算法,一看就会,一写就废
什么叫回溯算法 对于回溯算法的定义,百度百科上是这样描述的:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回, ...
- 算法笔记_188:历届试题 危险系数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点 ...
- 回溯 皇后 算法笔记_算法笔记-回溯法
(1)0-1背包问题 思路:构造一个二叉树,每个商品都有两种状态,要或者不要.如果要就在这个节点的左枝挂子节点,如果不要就在右节点挂子节点.如果全部商品都分配完状态之后就回溯,回溯到一个还有其他选择的 ...
- 算法笔记_图算法专题_关键路径 AOV网和AOE网
关键路径 1.基本概念 1.AOV网:顶点活动网,是指用顶点表示活动,而用边集表示活动优先关系的有向无环图. 2.AOE网:边活动网,是指用带权的边集表示活动,而用顶点表示事件的有向无环图. AOV网 ...
- 【75】颜色分类--荷兰国旗问题
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
最新文章
- 微生物组学研究的可再现性、可重现性、稳定性与普适性
- 一个自带简易数据集的模拟线性分类器matlab代码——实验训练
- android 插桩工具,Android Asm 插桩 教学项目
- [leetcode] 3.无重复字符的最长子串
- C#在Linux上的开发指南
- PWN-PRACTICE-BUUCTF-8
- android如何适配平板,适用于平板电脑、大屏设备和可折叠设备的自适应布局
- 《[深入浅出 C#] (第3版)》 - 学习笔记
- Linux su和sudo命令的区别,并获得root权限
- mysql 分区 mycat 分片_Mysql系列六:(Mycat分片路由原理、Mycat常用分片规则及对应源码介绍)...
- linux系统中make install 时指定安装路径
- 【Unity3D】游戏开发数学基础
- commit翻译中文_commit的意思在线翻译,解释commit中文英文含义,短语词组,音标读音,例句,词源,同义词【澳典网ODict.Net】...
- html中样式属性有哪些,css字体样式属性有哪些?
- RAKsmart高防服务器防御形式解析
- 企业集群平台架构设计与实现--LVS篇(二)
- FileInfo,DirectoryInfo
- Stata重复与去重
- 计算机word插图教案,中学信息技术《配插图》教案
- plsql-数据查询(二、条件查询)