
法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;
}
}
本文探讨了一种数组排序的特殊情形,即如何通过分块使得每块排序后元素值与其下标相等。算法核心在于遍历数组,维护当前最大值,当最大值等于当前下标时进行分割。该方法确保了块内元素按升序排列并与下标对应。提供的Java代码实现简洁高效,展示了这一过程。
223

被折叠的 条评论
为什么被折叠?



