题目

请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度都是O(1)。

deque & queue

deque是双向队列,相对于queue可以从头部和尾部进行操作

图解思路

【leetcode题解】C  双队列求最大值带详细图解### 解题思路 - 图1
【leetcode题解】C  双队列求最大值带详细图解### 解题思路 - 图2

代码

  1. class MaxQueue {
  2. public:
  3. queue<int> Q;
  4. deque<int> D;
  5. MaxQueue() {
  6. }
  7. int max_value() {
  8. if(Q.empty()) return -1;
  9. return D.front();
  10. }
  11. void push_back(int value) {
  12. while(!D.empty() && D.back() < value) D.pop_back();
  13. D.push_back(value);
  14. Q.push(value);
  15. }
  16. int pop_front() {
  17. if(Q.empty()) return -1;
  18. int ans = Q.front();
  19. if(ans == D.front())
  20. {
  21. D.pop_front();
  22. }
  23. Q.pop();
  24. return ans;
  25. }
  26. };
  27. /**
  28. * Your MaxQueue object will be instantiated and called as such:
  29. * MaxQueue* obj = new MaxQueue();
  30. * int param_1 = obj->max_value();
  31. * obj->push_back(value);
  32. * int param_3 = obj->pop_front();
  33. */