队列中取最大值操作问题
2015-01-11 20:23
295 查看
《编程之美》第3.7节:队列中取最大值操作问题
问题:如何能够以最低的时间复杂度来取队列中的最大值?
解法:用两个能够在线性时间取最大值的栈来构造队列,从而能够在O(1)的时间复杂度内取得最大值。
代码如下:
问题:如何能够以最低的时间复杂度来取队列中的最大值?
解法:用两个能够在线性时间取最大值的栈来构造队列,从而能够在O(1)的时间复杂度内取得最大值。
代码如下:
#include<iostream> #include<stack> using namespace std; class Stack { stack<int> s; stack<int> maxValue; public: void push(int a) { s.push(a); if(maxValue.empty() || maxValue.top()<=a) maxValue.push(a); } void pop() { if(s.top()==maxValue.top()) maxValue.pop(); s.pop(); } int maxVal() { if(maxValue.empty()) return INT_MIN; else return maxValue.top(); } int top() {return s.top();} bool empty() {return s.empty();} }; class Queue { Stack A; Stack B; public: int maxValue() { return max(A.maxVal(),B.maxVal()); } void push(int a) { B.push(a); } void pop() { move(); A.pop(); } int front() { move(); return A.top(); } void move() { if(A.empty()) { while(!B.empty()) { A.push(B.top()); B.pop(); } } } }; int main() { Queue q; q.push(1); q.push(3); q.push(2); cout<<q.maxValue()<<endl; q.pop(); cout<<q.front()<<endl; q.push(7); q.push(6); q.push(5); cout<<q.maxValue()<<endl; system("pause"); return 0; }
相关文章推荐
- 编程之美读书笔记_3.7_队列中取最大数操作问题
- 队列中取最大值操作问题(编程之美3.7)
- 编程之美——队列中取最大值操作问题
- 编程之美3.7——队列中取最大值操作问题
- 3.7 队列中取最大值操作问题
- 编程之美—队列中取最大值操作问题
- 编程之美---队列中取最大值操作问题
- 队列中取最大值操作问题
- <<编程之美>> -- 队列中取最大值操作的问题
- [编程之美] PSet3.7 队列中取最大值操作问题
- 编程之美读书笔记3.7队列中取最大值操作的问题 解法2
- 编程之美-3.7-队列中取最大值操作问题
- 队列中取最大值操作问题
- 队列中取最大值操作问题
- 读书笔记之编程之美 - 3.7 队列中取最大值操作问题
- 编程之美-队列中取最大值操作问题
- 队列中取最大值操作问题
- 队列中取最大值操作问题
- 队列中取最大值操作问题
- 编程之美3.7——队列中取最大值操作问题