题目地址:
https://leetcode.com/problems/max-chunks-to-make-sorted/description/
给定 0 ∼ n − 1 0\sim n-1 0∼n−1的一个排列 A A A,问最多将这个数组划分为多少段,可以使得段内排好序之后整个数组就有序了。
从左到右遍历 A A A,如果第一次发现已经遍历的那一段的最大值恰好是当前位置的下标,则说明说明这个最大值所在的位置到当前位置应当成为一个需要排序的段(否则这个最大值无法归位),排好序之后,后面的过程类似。代码如下:
class Solution {
public:
int maxChunksToSorted(vector<int>& a) {
int n = a.size(), res = 0;
for (int i = 0, max_i = 0; i < n; i++) {
max_i = max(max_i, a[i]);
if (i == max_i) res++;
}
return res;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。