博客
关于我
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/

你可能感兴趣的文章
nginx+vsftp搭建图片服务器
查看>>
Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
查看>>
nginx-vts + prometheus 监控nginx
查看>>
Nginx/Apache反向代理
查看>>
nginx: [emerg] getpwnam(“www”) failed 错误处理方法
查看>>
nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:
查看>>
nginx:Error ./configure: error: the HTTP rewrite module requires the PCRE library
查看>>
Nginx、HAProxy、LVS
查看>>
Nginx下配置codeigniter框架方法
查看>>
Nginx中使用expires指令实现配置浏览器缓存
查看>>
nginx中配置root和alias的区别
查看>>
nginx主要流程(未完成)
查看>>
Nginx之二:nginx.conf简单配置(参数详解)
查看>>
Nginx从入门到精通
查看>>
Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
查看>>
Nginx代理初探
查看>>
nginx代理地图服务--离线部署地图服务(地图数据篇.4)
查看>>
Nginx代理外网映射
查看>>
Nginx代理模式下 log-format 获取客户端真实IP
查看>>
Nginx代理解决跨域问题(导致图片只能预览不能下载)
查看>>