这题较简单,只需要明白,如果前面一串数的最大值小于后面一串数的最小值,那么就能够这样划分,因为这样最后还是有序的。O(n)的时间复杂度。
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
if(arr.empty())
return 0;
vector<int> maxValue(arr.size(),0);
vector<int> minValue(arr.size(),0);
int temp=arr[0];
for(int i=0;i<arr.size();i++){
if(arr[i]>=temp){
maxValue[i]=arr[i];
temp=arr[i];
}else{
maxValue[i]=temp;
}
}
temp=arr[arr.size()-1];
for(int i=arr.size()-1;i>=0;i--){
if(arr[i]<=temp){
minValue[i]=arr[i];
temp=arr[i];
}else{
minValue[i]=temp;
}
}
int count=1;
for(int i=0;i<arr.size()-1;i++){
if(maxValue[i]<minValue[i+1])
count++;
}
return count;
}
};