768. Max Chunks To Make Sorted II
768. Max Chunks To Make Sorted II
题目: https://leetcode.com/problems/max-chunks-to-make-sorted-ii/
难度: Hard
题意:
- 给定一个数组,求最多能够将数组分成多少段,使得每段排序之后连接起来,是一个有序数组
思路:
- 显而易见,数据能否分的条件是,分出来的左边数组的最大值不大于比右边数组的最小值
- 只需要扫描一下,先把最大值和最小值数组预处理出来,然后遍历就可以得出结果
解法:
class Solution {
public int maxChunksToSorted(int[] arr) {
int[] min = new int[arr.length];
int[] max = new int[arr.length];
max[0] = arr[0];
for (int i = 1;i < arr.length;i++) {
max[i] = Math.max(arr[i], max[i - 1]);
}
min[arr.length - 1] = arr[arr.length - 1];
for (int i = arr.length - 2;i >= 0;i--) {
min[i] = Math.min(arr[i], min[i + 1]);
}
int ret = 1;
for (int i = 0;i + 1 < arr.length;i++) {
if (max[i] <= min[i + 1]) {
ret++;
}
}
return ret;
}
}