Given an array arr
that is a permutation of [0, 1, ..., arr.length - 1]
, we split the array into some number of "chunks" (partitions), and individually sort each chunk. After concatenating them, the result equals the sorted array.
What is the most number of chunks we could have made?
Input: arr = [4,3,2,1,0] Output: 1 Explanation: Splitting into two or more chunks will not return the required result. For example, splitting into [4, 3], [2, 1, 0] will result in [3, 4, 0, 1, 2], which isn't sorted.
Input: arr = [1,0,2,3,4] Output: 4 Explanation: We can split into two chunks, such as [1, 0], [2, 3, 4]. However, splitting into [1, 0], [2], [3], [4] is the highest number of chunks possible.
對數組分段排序后整合,求最多能分成幾段。
解決:因為是permutation of [0, 1, ..., arr.length - 1],那么有序的情況就是arr[i] == i。
本身有序的數可以自成一段;而無序的數找最大的那個錯序數,作為分段的終點。
class Solution { public: int maxChunksToSorted(vector<int>& arr) { int res = 0; int i = 0; while (i<arr.size()) { if (arr[i] == i) { ++i; ++res; } else { int m = arr[i]; while (++i <= m) m = max(m, arr[i]); ++res; } } return res; } };