• 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();
        }
    }
    
  • 相关阅读:
    干将莫邪
    Rancher
    Rancher 1.6 版本 只能在 linux 下用
    野蛮人大作战
    Oracle
    Gradle
    正则表达式 我遇到的
    Redis
    NestJS 用TypeScript开发 nodeJS后端
    Koa2
  • 原文地址:https://www.cnblogs.com/xkf97/p/13094460.html
Copyright © 2020-2023  润新知