769. Max Chunks To Make Sorted


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM