题目:
给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。
我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后的原数组相同。
返回数组能分成的最多块数量。
解法:
[0, 1, ..., k-1] 如果前k个数可以单独排序,则前k个数的最大值max必然等于index。
如果max < index说明还有值为index的元素在index右边
如果max > index说明还有值小于index的元素在index右边。
func maxChunksToSorted(arr []int) int {
cnt := 0
max := 0
for i := range arr {
if arr[i] > max {
max = arr[i]
}
if max == i {
cnt++
}
}
return cnt
}