1、题目
769. 最多能完成排序的块 - 力扣(LeetCode) (leetcode-cn.com)
2、实现
(1)思路
- 当遍历到第i(i从0开始计数)个位置,如果可以切块,那么满足前i+1个元素的最大值一定等于i。
- 否则,一定有比i还小的值被强制划分到后面的块里了,这样各块排序后连起来就不是升序排序了。
(2)代码
/**
* @param {number[]} arr
* @return {number}
*/
var maxChunksToSorted = function(arr) {
let maxEle = arr[0];
let res = 0;
// 遍历数组,i如果等于前i+1个元素的最大值,则可以划分为一块
// 例如:[1,0,2,3,4]中[1,0]中前2个元素最大值为1
for(let i=0; i<arr.length; i++) {
// 统计前i+1个元素的最大值
maxEle = Math.max(maxEle, arr[i]);
// 比较
if(i === maxEle) {
res++;
}
}
return res;
};
3、参考
【300题刷题挑战】leetcode力扣769 最多能完成排序的块 maxChunksToSorted 第一百六十八题 | 数组和矩阵_哔哩哔哩_bilibili