请定义一个队列并实现函数max得到队列里的最大值,要求函数max、push_back和pop_back的时间复杂度都是O(1)
总结:
1.最大队列和最大栈的题目,区别在哪?队列是先进先出,尾部进首部出去;但是栈是尾部进去,尾部出来。所以这两题其实不太相同,不过核心思想就是要用一份辅助栈。
2.队列的最大值,一个用queue一个用deque,因为辅助最大队列中保存当前队列的最大值,它可能会把前面的最大值给覆盖。
这个感觉是数据流的样子,像滑动窗口,还是要好好区别一下。所以max_queue需要把pop_back
3.队列:queue,双向队列:deque要好好了解原理,使用的函数要区分。
剑指offer 20、包含min函数的栈
class solution {
public:
void push_back(double val) {
q.push(val);
if (q_max.empty()) {
q_max.push_back(val);
}
else {
if (q_max.back() > val) {
q_max.push_back(val);
}
else {
int n = 1;
while (!q_max.empty() && q_max.back() < val) {
q_max.pop_back();
n++;
}
while (n--!=0) {
q_max.push_back(val);
}
}
}
}
void pop_front() {
q.pop();
q_max.pop_front();
}
int top() {
int n = q_max.front();
return n;
}
queue<double> q;
deque<double> q_max;
};