• LeetCode -- Min Stack


    Question:

    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

    • push(x) -- Push element x onto stack.
    • pop() -- Removes the element on top of the stack.
    • top() -- Get the top element.
    • getMin() -- Retrieve the minimum element in the stack.

    Analysis:

    设计一个栈,它能够支持push, pop, top操作,并且能够在常数时间内检索到最小的元素。

    solution1: 利用Java内置的Stack类,并且设置一个格外的栈,当每次有元素进栈时都判断是否是额外栈的最小元素。这样当求最小元素时直接peek额外栈的栈顶元素即可。

    solution2: 不适用Java内置的Stack类,每个栈节点维护一个最小值(是当前节点至栈底的最小值),其余操作与上面相同,只不过push,pop等基本操作要自己简单的实现一下。

    Answer:

    Solution1:

    class MinStack {
        private Stack<Integer> stack = new Stack<Integer>();
        private Stack<Integer> minStack = new Stack<Integer>();
        public void push(int x) {
            if(minStack.isEmpty() || x <= minStack.peek()) //if x is the minimum value
                minStack.push(x);
            stack.push(x);
        }
    
        public void pop() {
            if(stack.peek().equals(minStack.peek())) //if the pop value is the minimum
                minStack.pop();
            stack.pop();    
        }
    
        public int top() {
            return stack.peek();    
        }
    
         public int getMin() {
             return minStack.peek();
         }
    }

    Solution2:

    class MinStack {
       StackNode top = null;
        public void push(int x) {
            if(top == null) {
                    top = new StackNode(x);
                    top.min = x;
                    top.next = null;
            }
            else {
                    StackNode node = new StackNode(x);
                    if(x < top.min)
                        node.min = x;
                    else node.min = top.min;
                    node.next = top;
                    top = node;
            }
        }
    
        public void pop() {
            if(top != null)
                    top = top.next;
        }
    
        public int top() {
            if(top != null)
                    return top.val;
            else return 0;
        }
    
        public int getMin() {
            if(top != null)
                    return top.min;
            else return 0;
        } 
    }
    class StackNode {
        int val;
        int min; //store the min utile this node 
        StackNode next;
        public StackNode(int x) {
            val = x;
        }
    }
  • 相关阅读:
    java文件下载
    java程序运行原理
    java io流(核心:读进来,写出去)
    oracle操作表和字段的sql复习
    深入理解C/S和B/S模式
    Windows PyCharm永久激活
    MacBook PyCharm永久激活
    百度云同同步盘 mac版
    SJW-遍历我的账户左侧导航页面(句柄切换)
    python-selenium无法调用浏览器的问题==
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/5190044.html
Copyright © 2020-2023  润新知