### 768. Max Chunks To Make Sorted II



题目:
https://leetcode.com/problems/max-chunks-to-make-sorted-ii/

难度:
Hard

题意：

1. 给定一个数组，求最多能够将数组分成多少段，使得每段排序之后连接起来，是一个有序数组

思路：

- 显而易见，数据能否分的条件是，分出来的左边数组的最大值不大于比右边数组的最小值
- 只需要扫描一下，先把最大值和最小值数组预处理出来，然后遍历就可以得出结果

解法：

```java
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;
    }
}
```

