[LeetCode] Implement Stack using Queues
2015-06-11 20:09
501 查看
Implement the following operations of a stack using queues.
push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
empty() – Return whether the stack is empty.
Notes:
You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue – which means only push to back, pop from front, size, and is empty operations are valid.
由于每次push()、top()或者pop()之后都有一个队列为空,因此直接将q1设为有元素的队列即可。可以省去出入队列的时间。
push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
empty() – Return whether the stack is empty.
Notes:
You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue – which means only push to back, pop from front, size, and is empty operations are valid.
解题思路
使用两个队列q1和q2,在q1上进行top()和push()操作,每次操作前把所有元素集中到q1中。实现代码
// Runtime: 0 ms 暂时理解为计时故障 class Stack { public: // Push element x onto stack. void push(int x) { gather(q1, q2); q1.push(x); } // Removes the element on top of the stack. void pop() { gather(q1, q2); while (q1.size() > 0 && q1.size() != 1) { q2.push(q1.front()); q1.pop(); } q1.pop(); } // Get the top element. int top() { gather(q1, q2); while (q1.size() > 0 && q1.size() != 1) { q2.push(q1.front()); q1.pop(); } int n = q1.front(); q2.push(q1.front()); q1.pop(); return n; } // Return whether the stack is empty. bool empty() { return q1.empty() && q2.empty(); } private: queue<int> q1; queue<int> q2; void gather(queue<int>& q1, queue<int>& q2) { while (!q2.empty()) { q1.push(q2.front()); q2.pop(); } } };
由于每次push()、top()或者pop()之后都有一个队列为空,因此直接将q1设为有元素的队列即可。可以省去出入队列的时间。
// Runtime: 0 ms class Stack { public: // Push element x onto stack. void push(int x) { toQ1(q1, q2); q1.push(x); } // Removes the element on top of the stack. void pop() { toQ1(q1, q2); while (q1.size() > 0 && q1.size() != 1) { q2.push(q1.front()); q1.pop(); } q1.pop(); } // Get the top element. int top() { toQ1(q1, q2); while (q1.size() > 0 && q1.size() != 1) { q2.push(q1.front()); q1.pop(); } int n = q1.front(); q2.push(q1.front()); q1.pop(); return n; } // Return whether the stack is empty. bool empty() { return q1.empty() && q2.empty(); } private: queue<int> q1; queue<int> q2; void toQ1(queue<int>& q1, queue<int>& q2) { if (q1.empty()) { q1 = q2; queue<int> q; q2 = q; } } };
相关文章推荐
- hdu 4296 Buildings(贪婪)
- UITableView小知识点(二)
- IBM Bluemix云平台24小时应用开发挑战赛参赛作品详解
- [转]->ios推送:本地通知UILocalNotification
- 关于SqlParameter设定size和value
- require(),include(),require_once()和include_once()区别
- Android--UI之Spinner
- Android UI 优化——使用HierarchyViewer工具
- CollectionVeiwCell和UICollectionView的手工创建
- UItableview上自定义cell,带有textview,控制uitableview滚动到响应位置,不被键盘挡住
- UVA 10911--Forming Quiz Teams+状态压缩+记忆化搜索
- iOS8.0-----UIAlertController
- h5新属性,可编辑的段落 contenteditable=“true”
- iOS UISearchBar 搜索功能
- UIWindow & UIWindowLevel笔记
- EasyUI 遮罩层使用
- Auto Layout 使用心得(五)—— 根据文字、图片自动计算 UITableViewCell 高度
- Debian 6(Squeeze)升级至Debian 7(Wheezy)
- Java基础 String StringBuffer StringBuilder
- leetcode 日经贴,Cpp code -Implement Stack using Queues