题目:
Implement the following operations of a stack using queues.
Notes:
push to back, peek/pop from front, size, and is empty operations are valid.
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
链接: http://leetcode.com/problems/implement-stack-using-queues/
题解:
一开始想使用两个Queue,来回倒腾一下就可以得到结果,但这样基本每个op都是O(n)。后来看了Discuss,发现一个Queue就可以,然后只有Push()的Complexity - O(n),应该算是optimal了。不过仔细想一想其实Push最好能是O(1),因为这个用得应该最频繁。 下面做法主要就是在push的时候把当前值放在队尾,以前的值我们重新放在队尾。
Time Complexity - Push - O(n), Pop - O(1), Peek - O(1), isEmpty- O(1)
class MyStack { // Push element x onto stack. Queue<Integer> q; public MyStack() { q = new LinkedList<>(); } public void push(int x) { q.offer(x); for(int i = 0; i < q.size() - 1; i++) { q.offer(q.peek()); q.poll(); } } // Removes the element on top of the stack. public void pop() { q.poll(); } // Get the top element. public int top() { return q.peek(); } // Return whether the stack is empty. public boolean empty() { return q.size() == 0; } }
Reference:
https://leetcode.com/discuss/46975/a-simple-c-solution
225. Implement Stack using Queues
原文:http://www.cnblogs.com/yrbbest/p/4994266.html