1.769. 最多能完成排序的块
数组arr是[0, 1, …, arr.length - 1]的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。我们最多能将数组分成多少块?
/*数组arr是[0, 1, ..., arr.length - 1]的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同*/
class Solution {
public int maxChunksToSorted(int[] arr) {
int count = 0;
int max = 0;
//当遍历到第i个位置时,如果可以切分为块,那前i个位置的最大值一定等于i。
//否则,一定有比i小的数划分到后面的块,那块排序后,一定不满足升序。
for(int i = 0; i < arr.length; i++){
max = Math.max(max, arr[i]);
if(max == i){
//统计前i个位置的最大元素
count ++;
}
}
return count;
}
}