博客
关于我
769. 最多能完成排序的块
阅读量:780 次
发布时间:2019-03-25

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

维护一个值是最右端,比如43210,那么一开始的r就是4,就是从这里到下标为4的就是一整块,但是中间可能有超过4的,比如453210,那么在中间的过程中就会更新成5,那么一直到5才是一块。这类似于我们在扫描数组时动态维护一个区间的结束点。

具体来说,我们可以这样想:我们需要为每个位置i确定它最终应该属于哪个子块。为了找到这些子块,我们可以使用一个变量r,它表示当前应该属于同一子块的最右端位置。

举个例子,假设i=0时,当前元素的值是4,我们将r设置为4,因为4比之前所有的值都大。i=1时,元素的值是5,比r大,所以r也更新为5。接着,i=2,发现元素是3,比r小,r保持不变。i=3时,元素是2,比r小,依然不更新。i=4时,元素是1,比r小,此时i等于r(4),所以我们需要将这作为一个子块结束,计数器res加1。

当i=5时,元素是0,同样比r=5小,所以不会改变r。i=5的时候,i等于r=5,所以又形成了一个子块,res加1。最终,整个数组可以被分成了3个子块。

这个思路的关键在于:每当i等于当前的r值时,我们就找到了一个完整的子块,这样我们就可以停下来数一下块的数量。这种方法省去了传统区间划分的麻烦,同时代码也变得非常简洁。

整块代码如下:

class Solution {public:int maxChunksToSorted(vector

&arr) {int res = 0;int r = 0;for(int i = 0; i < arr.size(); ++i) {r = max(arr[i], r);if(i == r) res++;}return res;}}

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

你可能感兴趣的文章
Python 接口并发测试详解
查看>>
Python 接口自动化 —— requests框架
查看>>
python 接口自动化数据结构(如列表、字典、元组)
查看>>
Python 接口自动化测试中的深拷贝与浅拷贝~
查看>>
Python 接口自动化测试中的高阶函数
查看>>
python 控制 cmd 命令行颜色
查看>>
Python 操作 Azure Blob Storage
查看>>
Python 操作 Excel 全攻略 | 包括读取、写入、表格操作、图像输出和字体设置
查看>>
Python 操作 JMeter 探索:pymeter 实操指南
查看>>
Python 操作 Redis
查看>>
Python 操作Mysql(PyMysql)
查看>>
Python 操作Redis
查看>>
Python 操作sqlite数据库及保存查询numpy类型数据(一)
查看>>
Python 操作sqlite数据库及保存查询numpy类型数据(二)
查看>>
Python 数据文件与网络数据序列化存储详解
查看>>
Python 数据结构与算法详解
查看>>
Python 数据采集、清洗、整理、分析以及可视化实战
查看>>
Python 数据预处理
查看>>
Python 无法安装包
查看>>
python 日历小部件 - 返回用户选择的日期
查看>>