文章目录
题目
代码(7.17 首刷部分看解析)
其实是和单调栈一样的思路。但这题又有点和Leetcode 155. 最小栈(⭐⭐⭐⭐⭐)不太一样,差别就在于一个是先进后出,这个是先进先出。
for (遍历这个数组)
{
while (队列不为空 && 队尾元素小于当前元素)
{
队尾元素弹出;
更新结果;
}
当前数据入队列;
}
class MaxQueue {
public:
deque<int> q1, q2;
MaxQueue() {}
int max_value() {
return q2.empty() ? -1 : q2.front();
}
void push_back(int value) {
q1.push_back(value);
while(!q2.empty() && q2.back() < value)
q2.pop_back();
q2.push_back(value);
}
int pop_front() {
if(q1.empty())
return -1;
if(q1.front() == q2.front()) {
q2.pop_front();
}
int x = q1.front();
q1.pop_front();
return x;
}
};