zoukankan      html  css  js  c++  java
  • LeetCode 232,225,155

    232. 用栈实现队列

    用一个输入栈,和一个输出栈,数据从输入栈输入,输出时,先判断输出栈是否为空,若为空,则将输入栈的数据转移到输出栈,若不为空则输出输出栈的首个元素,即为队列队首元素。

    Java

    class MyQueue {
    
        private Stack<Integer> in;
        private Stack<Integer> out;
    
        /** Initialize your data structure here. */
        public MyQueue() {
            in = new Stack<>();
            out = new Stack<>();
        }
        
        /** Push element x to the back of queue. */
        public void push(int x) {
            in.push(x);
        }
        
        /** Removes the element from in front of queue and returns that element. */
        public int pop() {
            if(out.empty()){
                while(!in.empty()){
                    out.push(in.pop());
                }
            }
            return out.pop();
        }
        
        /** Get the front element. */
        public int peek() {
            if(out.empty()){
                while(!in.empty()){
                    out.push(in.pop());
                }
            }
            return out.peek();
        }
        
        /** Returns whether the queue is empty. */
        public boolean empty() {
            return in.empty()&&out.empty();
        }
    }
    

    225. 用队列实现栈

    本题的重点在于用两个队列实现插入序列的逆序,方法是,使用一个空队列,每插入一个数,先放入空序列,然后再将另一个数列中数依次插入到后面,即可得到逆序的队列

    Java

    class MyStack {
        private Queue<Integer> in;
        private Queue<Integer> out;
    
        /** Initialize your data structure here. */
        public MyStack() {
            in = new LinkedList<>();
            out = new LinkedList<>();
        }
        
        /** Push element x onto stack. */
        public void push(int x) {
            in.offer(x);
            while(!out.isEmpty()){
                in.offer(out.poll());
            }
            Queue temp = in;
            in = out;
            out = temp;
        }
        
        /** Removes the element on top of the stack and returns that element. */
        public int pop() {
            return out.poll();
        }
        
        /** Get the top element. */
        public int top() {
            return out.peek();
        }
        
        /** Returns whether the stack is empty. */
        public boolean empty() {
            return out.isEmpty();
        }
    }
    

    155. 最小栈

    每向数据栈中插入一个数x,则往相应的最小栈中插入此时栈中的最小元素值,即为min(min,x),出栈时,数据栈中数和其在最小栈中的对应数一起出栈,min的值则置为最小栈的栈顶值,注意:如果最小栈空了,则应将min置为MAX_VALUE!!

    Java

    class MinStack {
        private Stack<Integer> dataStack;
        private Stack<Integer> minStack;
        private int min;
    
        /** initialize your data structure here. */
        public MinStack() {
            dataStack = new Stack<>();
            minStack = new Stack<>();
            min = Integer.MAX_VALUE;
        }
        
        public void push(int x) {
            dataStack.push(x);
            min = Math.min(min,x);
            minStack.push(min);
        }
        
        public void pop() {
            dataStack.pop();
            minStack.pop();
            min = minStack.isEmpty()?Integer.MAX_VALUE:minStack.peek();//注意!
        }
        
        public int top() {
            return dataStack.peek();
        }
        
        public int getMin() {
            return minStack.peek();
        }
    }
    
  • 相关阅读:
    BZOJ 3881: [Coci2015]Divljak
    BZOJ 2434: [Noi2011]阿狸的打字机
    BZOJ 2580: [Usaco2012 Jan]Video Game
    BZOJ 3940: [Usaco2015 Feb]Censoring
    BZOJ 3942: [Usaco2015 Feb]Censoring
    PTA L2-002 链表去重 团体程序设计天梯赛-练习集
    PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
    PTA L1-020 帅到没朋友 团体程序设计天梯赛-练习集
    Codeforces 429 B. Working out-dp( Codeforces Round #245 (Div. 1))
    HDU 6467.简单数学题-数学题 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
  • 原文地址:https://www.cnblogs.com/xkf97/p/13094460.html
Copyright © 2011-2022 走看看