11.2Max Chunks To Make Sorted数组
题目描述
给定一个含有0到n的整数数组,每个整数只出现一次,求这个数组最多可以分割成多少个子数组,使得对每个子数组进行增序排列后,原数组也是增序的。
输入输出样例
Input :[1, 0, 2, 3, 4]
Output:4
最多的分割是[1,0],[2],[3],[4]
题解
从左往右遍历,同时记录当前的最大值,每当当前最大值等于数组位置时,我们可以做一次分割
如果当前最大值大于数组位置,则说明右边一定有小于数组位置的数字,需要把他也加入待排序的子数组,又因为数组只包含不重复的0到n,所以当前的最大值一定不会小于数组位置。所以当前最大值等于数组位置时,假设是p,我们就可以完成一次分割操作,并且这个数与上一次分割的位置q之间的值一定是q+1到p的所有数字
cpp
#include <iostream>
#include <vector>
using namespace std;
int maxChunksToSorted(vector<int>& arr) {
int chunks = 0, cur_max = 0;
for (int i = 0; i < arr.size(); ++i) {
cur_max = max(cur_max, arr[i]);//找当前数组和最大值中最大的内个进行比较
if (cur_max == i) {//如果与数组下标相等,那就切
++chunks;
}
}
return chunks;
}
int main() {
vector<int> matrix = { 1, 0, 2, 3, 4 };
cout << maxChunksToSorted(matrix);
return 0;
}