每日一题系列 - 荷兰国旗问题
『每日一题』
题目取自清华大学《数据结构》题集,严蔚敏,米宁, 吴伟民
荷兰国旗问题:(难度5)设有一个仅由红白蓝三种颜色的条块组成的条块序列。求一种时间复杂度O(n)的算法,使得这些条块按红、白、蓝的顺序排好,即排成荷兰国旗的图案。
分析:大意是比如{红,蓝,白,白,蓝,红,白,蓝,白} -->{红,红,蓝,蓝,蓝,白,白,白,白}的调整
不过该题目并未规定是否可以另辟存储空间。
有兴趣的试试看吧。
『题解』:
其实此题并不难,如果一开始没有思路,可以先降级考虑一下两色旗问题,相信可以很快用分别指向队头和队尾两个的指针平行移动来调整序列内元素,算法复杂度是O(n)。然后考虑多了一种颜色,就是加了一个指针而已,算法复杂度不受影响。
该实现不用另辟array空间。需要额外几个指针。
//参数说明:red, current 指向队头,white指向队尾 void threeFlag(int* red, int * current, int * white) { while(current!=white) { if(*current==0){ if(current==red){current++;red++;continue;} if(current>red) { int temp; temp=*red; *red=*current; *current=temp; red++; continue; } } if(*current==1){current++;continue;} if(*current==2) { if(*white==2){white--;continue;} int temp; temp=*current; *current=*white; *white=temp; continue; } } } //testing scripts //0=red flag; 1=blue flag; 2=white int flags[12] ={0,1,2,1,0,2,1,2,1,1,1,0}; cout<<flags; threeFlag(flags,flags,flags+11); cout<<flags;
每日一题系列 - 荷兰国旗问题相关推荐
- leetcode 力扣每日一题系列详解——总目录
这是总目录,该系列持续更新中........ leetcode 力扣每日一题系列详解--总目录
- Oracle 每日一题系列合集
作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu_IT) 转载请联系授权 | (微信ID:xxq1426321293) 大家好,我是 JiekeXu,很高兴又和大家见面了 ...
- 【解题报告】Leecode 519. 随机翻转矩阵——Leecode每日一题系列
今天是坚持每日一题打卡的第二十六天 题目链接:https://leetcode-cn.com/problems/random-flip-matrix/solution/ 题解汇总:https://zh ...
- 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列
今天是坚持每日一题打卡的第二十七天 题目链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/ 题解汇总:https:// ...
- 【解题报告】Leecode 859. 亲密字符串——Leecode每日一题系列
今天是坚持每日一题打卡的第二十四天 题目链接:https://leetcode-cn.com/problems/buddy-strings/ 题解汇总:https://zhanglong.blog.c ...
- 【解题报告】Leecode 423. 从英文中重建数字——Leecode每日一题系列
今天是坚持每日一题打卡的第二十五天 题目链接:https://leetcode-cn.com/problems/reconstruct-original-digits-from-english/ 题解 ...
- 【解题报告】Leecode 384. 打乱数组——Leecode每日一题系列
今天是坚持每日一题打卡的第二十三天 题目链接:https://leetcode-cn.com/problems/shuffle-an-array/ 题解汇总:https://zhanglong.blo ...
- 【最优解】Leecode 594. 最长和谐子序列——Leecode每日一题系列
今天是坚持每日一题打卡的第二十二天 题目链接:https://leetcode-cn.com/problems/longest-harmonious-subsequence/ 题解汇总:https:/ ...
- 解题报告-Leecode 563. 二叉树的坡度——Leecode每日一题系列
今天是坚持每日一题打卡的第二十二天 题目链接:https://leetcode-cn.com/problems/binary-tree-tilt/ 题解汇总:https://zhanglong.blo ...
- C++题解-Leecode 318. 最大单词长度乘积——Leecode每日一题系列
今天是坚持每日一题打卡的第二十二天 题目链接:https://leetcode-cn.com/problems/maximum-product-of-word-lengths/ 题解汇总:https: ...
最新文章
- 线性表的存储结构总结
- h5课件制作_Articulate storyline交互H5视频课件制作技巧
- 递归和分治思想及其应用
- 整理了Kafka的一些常用工具,建议收藏备用!| 博文精选
- XML DOM---解析xml dom
- Lucene.Net 3.0.3如何从TokenStream中获取token对象
- 分布式任务队列:Celery使用记录
- mysql join 实践
- Android 4 编程入门经典
- Python多进程之Pool
- 天正暖通2013版安装包附带注册机下载
- echarts 实现图表缩放功能 dataZoom自带属性实现
- SA387Gr22合金板采购标书
- GMap.Net 实现离线地图
- 读《洞穴奇案》——功利主义与法的精神
- 【光流评估】《Optical Flow Estimation using a Spatial Pyramid Network》2016 Tubingen, Germany
- 网上书店订单流程c语言源代码,网上书店的设计及实现.doc
- java连接OPC 报错汇总
- 2009年6月2日,博客近期所做的改动通报!
- 风力发电机组机械功率Pm与转子转速Wm关系(Matlab实现)