剑指 Offer 59 - II. 队列的最大值https://leetcode.cn/problems/dui-lie-de-zui-da-zhi-lcof/
方法与以下文章中的类似,使用单调队列实现,不再赘述
// 单调队列,存放的元素单调递减
class MonotonicQueue
{
public:
void push(const int val)
{
// 先把尾部小于val的元素弹出
while (!d.empty() && d.back() < val)
{
d.pop_back();
}
d.push_back(val);
}
void pop()
{
if (!d.empty())
{
d.pop_front();
}
}
int max()
{
return d.empty() ? -1 : d.front();
}
private:
deque<int> d;
};
class MaxQueue {
public:
MaxQueue() {
}
int max_value() {
return m_data.empty() ? -1 : mq.max();
}
void push_back(int value) {
m_data.push(value);
mq.push(value);
}
int pop_front() {
// base case
if (m_data.empty())
{
return -1;
}
int temp = m_data.front();
if (mq.max() == temp)
{
mq.pop();
}
m_data.pop();
return temp;
}
private:
queue<int> m_data;
MonotonicQueue mq;
};