博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LintCode: Sort Colors
阅读量:6271 次
发布时间:2019-06-22

本文共 837 字,大约阅读时间需要 2 分钟。

通过交换,对0,1,2排序

使用三个标记[循环不变式]

i从前向后,记录最后一个0的位置

j从后向前,记录第一个2的位置

k从前向后,是遍历用的游标

[0..i-1]是0

[i..k-1]是1

[k,j-1]是未探测

[j..n-1]是2

初始k=0时,0,1,2的区域都是空,所有区域都是未探测,循环k=0..n-1

如果a[k] = 0=>swap(a[i++], a[k])

如果a[k] = 1=>无操作

如果a[k] = 2=>swap(a[--j], a[k--])

复杂度O(n)

1 class Solution{ 2 public: 3     /** 4      * @param nums: A list of integer which is 0, 1 or 2  5      * @return: nothing 6      */     7     void sortColors(vector
&nums) { 8 // write your code here 9 int i = 0, j = nums.size();10 for (int k = 0; k < j; ++k) {11 if (nums[k] == 0) {12 swap(nums[i++], nums[k]);13 } else if (nums[k] == 2) {14 swap(nums[--j], nums[k--]);15 }16 }17 }18 };

 

本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/p/5009541.html,如需转载请自行联系原作者

你可能感兴趣的文章
C#:关联程序和文件
查看>>
推荐科研软件
查看>>
gradle
查看>>
如何取消未知类型文件默认用记事本打开
查看>>
[Javascript] Immute Object
查看>>
Java 关于finally、static
查看>>
Posix mq和SystemV mq区别
查看>>
P6 EPPM Manual Installation Guide (Oracle Database)
查看>>
XMPP协议、IM、客户端互联详解
查看>>
PHP写文件函数
查看>>
mysql的sql_mode合理设置
查看>>
函数连续性与可导性
查看>>
linux下libevent安装
查看>>
用ip来获得用户所在地区信息
查看>>
卡尔曼滤波
查看>>
linux下面覆盖文件,如何实现直接覆盖,不提示
查看>>
CSS3阴影 box-shadow的使用和技巧总结
查看>>
Linux下高cpu解决方案
查看>>
SQL事务用法begin tran,commit tran和rollback tran的用法
查看>>
centos7 crontab笔记
查看>>