LintCode: Sort Colors

简介:

通过交换,对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<int> &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,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 存储 人工智能
AI浪潮下,大模型如何在音视频领域运用与实践?
LiveVideoStackCon2023深圳站,阿里云视频云演讲分享
671 1
|
存储 Linux Shell
Linux绝对路径和相对路径
在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置。 只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。指明一个文件存放的位置,有 2 种方法,分别是使用绝对路径和相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根目录“/”开始的倒置的树状结构 绝对路径一定是由根目录 / 开始写起。例如,使用绝对路径的表示方式指明 bin 文件所在的位置,该路径应写为 /usr/bin,测试代码如下: [root@localhost ~]# bin bash: bin: command not found <-- 没有找到 [
387 0
|
网络协议 大数据 数据挖掘
文献丨多组学大数据构建小麦穗发育转录调控网络,TRN+GWAS挖掘关键转录调控(二)
文献丨多组学大数据构建小麦穗发育转录调控网络,TRN+GWAS挖掘关键转录调控(二)
|
2月前
|
存储 安全 数据处理
从GDPR“天价罚单”到数据安全法“安全评估”:代购系统的合规“避雷指南”
代购系统面临欧盟GDPR与中国《数据安全法》双重合规挑战。本文从法律框架、合规要点、技术工具与操作流程四方面,解析跨境数据处理的应对策略,助力企业实现安全合规的数据跨境流动。
|
5月前
|
Oracle 关系型数据库 MySQL
Oracle Linux 8.10 编译安装sysbench
Oracle Linux 8.10 编译安装sysbench
162 34
|
SQL Linux
Cannot connect to discovery server for announce: Announcement failed for http://hadoop102:8881
linux下启动Presto报错:Cannot connect to discovery server for announce: Announcement failed for http://hadoop102:8881
Cannot connect to discovery server for announce: Announcement failed for http://hadoop102:8881
|
6月前
|
存储 JSON 数据库
HarmonyOS Next 端云一体化(2)
本文介绍了HarmonyOS云数据库端云一体化中的数据库操作流程。首先创建名为“Study”的存储区,并在DevEco Studio中配置信息;接着定义对象类型,以“Book”为例,详细说明objectTypeName、fields、indexes和permissions的设置规则;然后通过JSON文件添加数据条目,配置cloudDBZoneName和objects字段;最后将本地数据库部署至AGC平台并刷新数据。全文涵盖存储区创建、对象类型定义、数据操作及云端部署等核心步骤,为端云协同开发奠定基础。
141 5
HarmonyOS Next 端云一体化(2)
|
6月前
|
存储
鸿蒙开发:父组件如何调用子组件中的方法?
也许大家可能会有疑问,子组件更新UI,直接由装饰器触发不就行了,希望大家能够明白,以上呢只是简单的案例,在实际的开发中,子组件方法中可能很多的逻辑,比如网络请求,比如数据存储等等,并不是简单的UI更新。
233 1
|
前端开发 网络协议
Nest.js 实战 (十四):如何获取客户端真实 IP
这篇文章介绍了在Nest.js应用中获取客户端真实IP地址的问题及解决方法。问题出现在使用本地代理时,请求的IP地址总是返回::1或::ffff:127.0.0.1。为解决这个问题,需要确保代理服务器正确设置转发头如X-Forwarded-For或X-Real-IP,后端服务能够读取这些头信息来确定客户端的IP地址。文章以作者自己的OpenResty应用为例,展示了如何通过配置反向代理和设置X-Forwarded-For头来获取真实IP地址,并提供了相关的代码示例。最后,文章提到了使用这个解决方案后的实际效果,例如在操作日志中记录真实IP地址。
324 0
|
存储 开发者 Python
Python项目实战案例-批量下载网易云榜单音乐保存至本地
Python项目实战案例-批量下载网易云榜单音乐保存至本地
268 1