Description Link to heading
768.max-chunks-to-make-sorted-ii
Solution Link to heading
A sufficient condition for an array to be divisible into blocks that satisfy the condition is that all elements in the block are less than or equal to any of the undivided elements in the right-hand array.
Code Link to heading
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
int idx = 0; // 表示划分arr
int ans = 0;
map<int, int, std::greater<int>> l_map;
map<int, int> r_map;
for (int i = 0; i < arr.size(); i++)
r_map[arr[i]]++;
while (idx < arr.size()) {
for (int i = idx; i < arr.size(); i++) {
l_map[arr[i]]++;
r_map[arr[i]]--;
if (r_map[arr[i]] == 0)
r_map.erase(arr[i]);
if (r_map.empty())
break;
if (l_map.begin()->first <= r_map.begin()->first) {
idx = i + 1;
ans++;
break;
}
}
if (r_map.empty()) {
ans++;
break;
}
}
return ans;
}
};