2015年11月3日星期二

Leetcode 232 Implement Queue using Stacks

Implement 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.
Notes:
  • You must use only standard operations of a stack -- which means only push to toppeek/pop from topsize, and is 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).
Solution 1: use 2 stacks, push to stack 1 and pop from stack 2, when stack 2 is empty, move all elements from stack 1 to stack 2. It is O(1) solution like re-size array.
 class MyQueue {  
   Deque<Integer> stack1=new LinkedList<>();  
   Deque<Integer> stack2=new LinkedList<>();  
   // Push element x to the back of queue.  
   public void push(int x) {  
     stack1.push(x);  
   }  
   // Removes the element from in front of queue.  
   public void pop() {  
     if (stack2.isEmpty()) {  
       while (!stack1.isEmpty()) stack2.push(stack1.pop());  
     }  
     stack2.pop();  
   }  
   // Get the front element.  
   public int peek() {  
     if (stack2.isEmpty()) {  
       while (!stack1.isEmpty()) stack2.push(stack1.pop());  
     }  
     return stack2.peek();  
   }  
   // Return whether the queue is empty.  
   public boolean empty() {  
     return stack1.isEmpty() && stack2.isEmpty();  
   }  
 }  

没有评论:

发表评论