题目名称

给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。

我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后的原数组相同。

返回数组能分成的最多块数量。

示例

输入: arr = [4,3,2,1,0]
输出: 1
解释:
将数组分成2块或者更多块,都无法得到所需的结果。
例如,分成 [4, 3], [2, 1, 0] 的结果是 [3, 4, 0, 1, 2],这不是有序的数组。

题解

保证第i位的最大值等于i,否则不能组成有序的数组

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* @param {number[]} arr
* @return {number}
*/
var maxChunksToSorted = function(arr) {
let max = 0, total = 0
for(let i = 0; i < arr.length; i++) {
let item = arr[i]
max = Math.max(item, max)
if(max === i) total++
}
return total
};