解法一
双指针
class MaxQueue {
public:
int q[20000];//要足够大
int begin=0,end=0;
MaxQueue() {
}
int max_value() {
int ans=-1;
for (int i = begin; i != end ; i++)
{
ans = max(ans,q[i]);
}
return ans;
}
void push_back(int value) {
q[end++]=value;//先存储value,然后end再自增1
}
int pop_front() {
if(begin==end) return -1;
return q[begin++];
}
};
解法二
维护双端队列,递减序列
class MaxQueue {
public:
queue<int> q;
deque<int> d;//找到最大值
MaxQueue() {
}
int max_value() {
if(d.empty()) return -1;
return d.front();
}
void push_back(int value) {
while(!d.empty() && value>d.back()) d.pop_back();
d.push_back(value);
q.push(value);
}
int pop_front() {
if(q.empty()) return -1;
int ans=q.front();
if(q.front()==d.front()) d.pop_front();
q.pop();
return ans;
}
};