zoukankan      html  css  js  c++  java
  • [LeetCode] 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). 

    思路:用两个stack去实现

    class MyQueue {
        Stack<Integer> stack1=new Stack<Integer>();  //
        Stack<Integer> stack2=new Stack<Integer>();   //// 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() {
            while(!stack1.isEmpty())
            {
                stack2.push(stack1.pop());
            }
            if(!stack2.isEmpty())
                stack2.pop();
            while(!stack2.isEmpty())
            {
                stack1.push(stack2.pop());
            }
        }
    
        // Get the front element.
        public int peek() {
            int ret=0;
            while(!stack1.isEmpty())
            {
                stack2.push(stack1.pop());
            }
            if(!stack2.isEmpty())
            {
                ret=stack2.peek();
            }
            while(!stack2.isEmpty())
            {
                stack1.push(stack2.pop());
            }
            return ret;
        }
    
        // Return whether the queue is empty.
        public boolean empty() {
            return stack1.isEmpty();
        }
    }

    这里每次pop和peek操作都会将stack1转到stack2中,比较麻烦。再考虑下可以不用发给转来转去,stack1可以作为队尾,stack2可以作为对首的

    class MyQueue {
        Stack<Integer> stack1=new Stack<Integer>();  //
        Stack<Integer> stack2=new Stack<Integer>();   //// 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()) stack2.pop();
            else {
                while(!stack1.isEmpty())
                {
                    stack2.push(stack1.pop());
                }
                if(!stack2.isEmpty()) stack2.pop();
            }
        }
    
        // Get the front element.
        public int peek() {
            int ret=0;
            if(!stack2.isEmpty()) ret=stack2.peek();
            else {
                while(!stack1.isEmpty())
                {
                    stack2.push(stack1.pop());
                }
                if(!stack2.isEmpty()) ret=stack2.peek();
            }
            return ret;
        }
    
        // Return whether the queue is empty.
        public boolean empty() {
            return stack1.isEmpty() && stack2.isEmpty();
        }
    }
  • 相关阅读:
    JavaScript cookie详解
    Javascript数组的排序:sort()方法和reverse()方法
    javascript中write( ) 和 writeln( )的区别
    div做表格
    JS 盒模型 scrollLeft, scrollWidth, clientWidth, offsetWidth 详解
    Job for phpfpm.service failed because the control process exited with error code. See "systemctl status phpfpm.service" and "journalctl xe" for details.
    orm查询存在价格为空问题
    利用救援模式破解系统密码
    SSH服务拒绝了密码
    C# 调用 C++ DLL 中的委托,引发“对XXX::Invoke类型的已垃圾回收委托进行了回调”错误的解决办法
  • 原文地址:https://www.cnblogs.com/maydow/p/4641012.html
Copyright © 2011-2022 走看看