• 最小栈-算法刷题总结


    最小栈:

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

    push(x) —— 将元素 x 推入栈中。
    pop() —— 删除栈顶的元素。
    top() —— 获取栈顶元素。
    getMin() —— 检索栈中的最小元素。

    示例:

    输入:

        ["MinStack","push","push","push","getMin","pop","top","getMin"]
        [[],[-2],[0],[-3],[],[],[],[]]
    

    输出:

        [null,null,null,null,-3,null,0,-2]
    

    解释:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin(); --> 返回 -3.
    minStack.pop();
    minStack.top(); --> 返回 0.
    minStack.getMin(); --> 返回 -2.

    提示:
    pop、top 和 getMin 操作总是在 非空栈 上调用。

    解法一:辅助栈法

    思路:用一个辅助栈来记录存入栈的当前最小值,相当于用空间换时间。

    import java.util.ArrayList;
    import java.util.Stack;
    
    /**
    
    @author cosefy
    
    @date 2020/6/21
    */
    
    
    public class MinStack {
    
    public Stack<Integer> stack;
    public Stack<Integer> min_stack;
    
    public MinStack() {
        stack = new Stack<>();
        min_stack = new Stack<>();
    }
    
    public void push(int x) {
        if (min_stack.empty() || x < min_stack.peek()) {
            min_stack.push(x);
        }
        stack.push(x);
    }
    
    public void pop() {
        if (stack.pop().equals(min_stack.peek()))  //注意此处不要用双等号判断。
            min_stack.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return min_stack.peek();
    }
    }
    
    解法二:单栈解法

    思路:不利用辅助栈,关键可以记录到当前最小值出栈后原先的最小值,所以,可以每当每次遇到更小值,把原先最小值先压入栈。

  • 相关阅读:
    点分治。。。。。
    巧克力
    离散化初步
    [NOI1998]:围巾裁剪
    关于Tarjan(3)——离线LCA
    Eigen学习笔记2-Matrix类
    Eigen学习
    Git使用入门笔记
    LeetCode 之二叉树中序遍历(使用栈实现)
    leetCode之二叉树数中序遍历(递归实现)
  • 原文地址:https://www.cnblogs.com/cosefy/p/13173641.html
Copyright © 2020-2023  润新知