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,如需转载请自行联系原作者

相关文章
|
开发工具 git
【git 实用指南】git 修复错误提交,版本回退
【git 实用指南】git 修复错误提交,版本回退
249 1
|
SQL 自然语言处理 数据挖掘
大模型与数据分析:探索Text-to-SQL(中)
大模型与数据分析:探索Text-to-SQL(中)
2126 0
|
存储 运维 Cloud Native
Curve 版 PolarDB 的安装与使用 | 学习笔记
快速学习 Curve 版 PolarDB 的安装与使用,介绍了 Curve 版 PolarDB 的安装与使用系统机制, 以及在实际应用过程中如何使用。
Curve 版 PolarDB 的安装与使用 | 学习笔记
|
缓存 Java 中间件
jvm性能调优实战 -55RPC调用引发的OOM故障
jvm性能调优实战 -55RPC调用引发的OOM故障
238 0
|
10月前
|
运维 前端开发 应用服务中间件
操作系统智能助手OS Copilot新功能
作为一名公司的研发人员,我体验了OS Copilot的安装与使用。尽管我的工作主要涉及前后端开发,对云服务有一定了解。OS Copilot的安装过程直观顺利,但目前支持的操作系统较少。通过-t和-f功能,可以快速测试命令输出、处理批量任务及调试脚本,显著提升了工作效率。然而,管道功能在实际应用中存在识别文件路径的问题,有待改进。总体而言,OS Copilot极大地提高了我的运维效率,并成为开发中的有效工具,我对它的未来潜力充满信心。
268 11
【多线程面试题二十五】、说说你对AQS的理解
这篇文章阐述了对Java中的AbstractQueuedSynchronizer(AQS)的理解,AQS是一个用于构建锁和其他同步组件的框架,它通过维护同步状态和FIFO等待队列,以及线程的阻塞与唤醒机制,来实现同步器的高效管理,并且可以通过实现特定的方法来自定义同步组件的行为。
【多线程面试题二十五】、说说你对AQS的理解
|
缓存 网络协议 Linux
网络的救命稻草:重传机制如何确保数据顺利传输?
在网络传输中,数据的可靠性和稳定性一直是一个重要的挑战。幸运的是,重传机制应运而生,为我们解决了这个问题。本文将深入探讨重传机制在网络中的应用和工作原理。我们将介绍TCP中最常见的超时重传和快速重传,以及SACK和D-SACK这两种高级重传机制。了解这些机制如何工作可以帮助我们更好地理解数据传输的可靠性和稳定性的保障。
758 1
网络的救命稻草:重传机制如何确保数据顺利传输?
|
JavaScript jenkins 持续交付
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
574 0
|
机器学习/深度学习 数据采集 人工智能
探索AI工具
探索AI工具
138 0
|
JavaScript
oninput 和 onchange 事件有什么区别
oninput 和 onchange 事件有什么区别

热门文章

最新文章