题目:
给一个 arr数组,为
[0, 1, ..., arr.length - 1]的一个排列
,我们把arr数组分成很多chunks,使得每一个chunk内部排序后,合起所有的chunk,能得到一个整的排好序的数组。请问我们最多能分成多少个chunks?
分析:
很自然地想到,每个chunk所有的数字都要比右边的chunk数字小。而且题目中有个条件一定要用上:arr数组是0~n的排列。也就是说,如果从小到大排,第i个数应该在第i个位置上。如果前i个数中最大的那个数正好在第i个位置上,那么在第i个位置之前的数字可以成为一个chunk。
代码:
public int maxChunksToSorted(int[] arr) {
int ans = 0;
for(int i = 0,maxn = 0;i <arr.length;i++){
maxn = max(arr[i],maxn);
if(maxn == i) ans++;
}
return ans;
}
时间复杂度:O(N)
空间复杂度:O(1)