1.关键点:要想分块后排序,等价于整体排序,那么对于这些分块来说必须原本是整体有序:即一个块中的数,必须整体大于等于前面块中的数,小于等于后面块中的数。
2.所以,利用这个特点,将所给串比排序后的串做对比,检查是否满足这个特性即可(通过检查对应块中的数,是否存在于排序后的对应位置的块中)。
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
unordered_map<int,int> ct;
vector<int> tmp=arr;
int no=0,ans=0;
sort(tmp.begin(),tmp.end());
for(int i=0;i<arr.size();i++){
cout<<arr[i]<<" "<<tmp[i]<<endl;
}
for(int i=0;i<arr.size();i++){
ct[arr[i]]+=1;
cout<<ct[arr[i]];
if(ct[arr[i]]==0) no--;
if(ct[arr[i]]==1) no++;
ct[tmp[i]]-=1;
cout<<" "<<ct[tmp[i]]<<endl;
if(ct[tmp[i]]==0) no--;
if(ct[tmp[i]]==-1) no++;
if(no==0){
ans++;
cout<<ans<<endl;
}
}
return ans;
}
};