769.最多能完成排序的块

63 阅读1分钟

题目:
给定一个长度为 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
}