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

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

直白表述:给定一个数组,元素值只可能是0,1,2构成,其数组的组成随机,即三种元素混杂无序,找到一个算法,只借用固定量的外部空间,在一次遍历后,将数组成为升序。

说白了就是这么个问题。

我们需要的是0要排在前面,2呢就排在后面,1就不动,这样就好了,但是往前排往后排我们一般的都需要移动元素,这就不好了,题目要求一遍遍历,并且空间一定,那就只能交换了,具体怎么交换呢?就需要用到指示位,告诉我们从哪以前都是0,从哪以后都是2,当然夹在中间的就是1了。所以我们就遍历中间的部分,是0就跟前面 的交换,是2就跟后面的交换,1就跳过。

class Solution {public:    void sortColors(int A[], int n) {       int r = 0;       int j = 0;       int b = n - 1;       for(; j <= b;){           if(A[j] == 0)//red           swap(A[r++], A[j++]);           else if(A[j] == 2)//blue           swap(A[j], A[b--]);           else ++j;//write       }    }};
这里有一个地方就是swap(A[r++],A[j++]),r++我们好理解,已经是0了,就移动到下一个未知,j为什么也可以++了呢?因为它不是1就是0,是1当然就跳过,是0就也不用处理了,为什么不是2呢?因为是2的话我们肯定之前就把它移到后面去了。

转载地址:http://nrlji.baihongyu.com/

你可能感兴趣的文章
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
linux对于没有写权限的文件如何保存退出vim
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>
【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
查看>>
ssh 如何方便的切换到其他节点??
查看>>
JSP中文乱码总结
查看>>
Java-IO-File类
查看>>
Java-IO-java的IO流
查看>>
Java-IO-输入/输出流体系
查看>>
Java实现DES加密解密
查看>>
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>
Java大数据:Hbase分布式存储入门
查看>>
Java大数据:全文搜索引擎Elasticsearch入门
查看>>
大数据学习:Hadoop入门学习书单
查看>>
大数据学习:Spark SQL入门简介
查看>>
大数据学习:Spark RDD操作入门
查看>>