原题网址:https://leetcode.com/problems/implement-queue-using-stacks/
mplement the following operations of a queue using stacks.
- push(x) -- Push element x to the back of queue.
- pop() -- Removes the element from in front of queue.
- peek() -- Get the front element.
- empty() -- Return whether the queue is empty.
- You must use only standard operations of a stack -- which means only
push to top
,peek/pop from top
,size
, andis empty
operations are valid. - Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
- You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
思路:使用两个栈,在入队的时候通过两个栈实现顺序反转,入队的时间复杂度O(n),其他操作的时间复杂度O(1)
class MyQueue {
// Push element x to the back of queue.
private Stack<Integer> queue = new Stack<>();
private Stack<Integer> buf = new Stack<>();
public void push(int x) {
while (!queue.isEmpty()) buf.push(queue.pop());
queue.push(x);
while (!buf.isEmpty()) queue.push(buf.pop());
}
// Removes the element from in front of queue.
public void pop() {
queue.pop();
}
// Get the front element.
public int peek() {
return queue.peek();
}
// Return whether the queue is empty.
public boolean empty() {
return queue.isEmpty();
}
}
class MyQueue {
// Push element x to the back of queue.
private int[] queue = new int[1];
private int[] buf = new int[1];
private int qsize = 0;
private int bsize = 0;
public void push(int x) {
if (qsize == queue.length) {
int[] temp = new int[queue.length<<1];
for(int i=0; i<qsize; i++) temp[i] = queue[i];
queue = temp;
buf = new int[queue.length];
}
bsize = 0;
while (qsize > 0) buf[bsize++] = queue[--qsize];
queue[qsize++] = x;
while (bsize > 0) queue[qsize++] = buf[--bsize];
}
// Removes the element from in front of queue.
public void pop() {
qsize --;
}
// Get the front element.
public int peek() {
return queue[qsize-1];
}
// Return whether the queue is empty.
public boolean empty() {
return qsize == 0;
}
}