解题思路:
这是一道理解起来就很容易解决的题目,其实就是将数组尽可能分块,每块排序后是原数组升序排序后的一部分,那么直接贪心,每找到一个区域的序列与原排序后的序列相同,就ans++,直到遍历完整个数组,找区域可以用map,将对应的数记录下来,代码如下:
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
vector<int> res = arr;
sort(res.begin(), res.end());
unordered_map<int, int> mp;
int ans = 0;
for(int i = 0; i < arr.size(); i ++) {
mp[arr[i]] ++;
if(mp[arr[i]] == 0) {
mp.erase(arr[i]);
}
mp[res[i]] --;
if(mp[res[i]] == 0) {
mp.erase(res[i]);
}
if(mp.size() == 0) {
ans ++;
}
}
return ans;
}
};