法1:
要考虑数组下标和元素值的关系。
升序排序后,数组下标和元素值相等。
要想使每个块划分后,排完序其每个元素的值和其下标相等,那么划分块时,当前块的最大值应该等于当前划分位置。
此时,首先最大值排序之后会在当前划分位置,并且,块内元素都比它小,且唯一,也就是说,它们的值为【块开始下标~块结束下标】
因此将该块升序排序后,每个元素都和其下标相等。
具体的:
//从左往右遍历数组,维护当前最大值
//当当前最大值等于当前下标时,可以分割一次
class Solution {
public int maxChunksToSorted(int[] arr) {
int curmax = 0;
int n = arr.length;
int res = 0;
for(int i=0;i<n;i++){
curmax = Math.max(curmax,arr[i]);
if(curmax==i)
res++;
}
return res;
}
}