当前位置:首页 > 编程笔记 > 正文
已解决

算法练习第六十四天

来自网友在路上 171871提问 提问时间:2023-09-24 09:22:02阅读次数: 71

最佳答案 问答题库718位专家为你答疑解惑

LCR 184. 设计自助结算系统 - 力扣(LeetCode)

总结:利用一个双端维护队列一个往后递减的队列,对头是最大值,每次进入一个新值时就一直和队尾元素比较将比新的值小的数排出,这样能保证留在队列中的数都是会对最大值产生影响的数,而当主队列中将要排出的数与双端队列对头数相等时则也要将双端队列队头数排出,否则会对主队列中最大的数产生影响。

代码:

class Checkout {queue<int> que;deque<int> d;public:Checkout() {}int get_max() {if(d.empty()){return -1;}return d.front();}void add(int value) {while(!d.empty() && value >= d.back()){d.pop_back();}d.push_back(value);que.push(value);}int remove() {if(que.empty()){return -1;}int temp = que.front();if(temp == d.front())d.pop_front();que.pop();return temp;}
};

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"算法练习第六十四天":http://eshow365.cn/6-12685-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!