题目:
/** 排列:按照一定的顺序排成一列
* @auther start
* @create 2023-11-21 20:46
*/
public int maxChunksToSorted(int[] arr) {
//栈中存储的是每一个块中的最大值
Deque<Integer> stack = new LinkedList<>();
for (int v : arr) {
if (stack.isEmpty() || stack.peek() <= v) {
stack.push(v);
} else {
//该值已经和v比较过了不用重复比较
int max = stack.pop();
//v小也要比前面的分块最大值大,若小于前面的分块的最大值则前面的分块不合理去除
while (!stack.isEmpty() && stack.peek() > v) {
stack.pop();
}
stack.push(max);
}
}
return stack.size();
}