首页 > 其他 > 详细

LeetCode - 最小栈

时间:2021-07-08 18:28:14      阅读:20      评论:0      收藏:0      [点我收藏+]

前言

/**
 * @Description LeetCode 155. 最小栈
 * 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
 *      push(x) —— 将元素 x 推入栈中。
 *      pop() —— 删除栈顶的元素。
 *      top() —— 获取栈顶元素。
 *      getMin() —— 检索栈中的最小元素。
 *
 * 来源:力扣(LeetCode)
 * 链接:https://leetcode-cn.com/problems/min-stack
 */

具体实现

  • 实现类
import java.util.Stack;

public class MinStack {

    /**
     * 栈
     */
    private Stack<Integer> stack;

    /**
     * 辅助栈
     */
    private Stack<Integer> minStack;

    /**
     * 初始化
     */
    public MinStack() {
        stack = new Stack<>();
        minStack = new Stack<>();
    }

    /**
     * 将元素推入栈中
     * 每当push()新值进来时,
     * 如果小于等于 minStack,
     * 则一起push()到minStack,即更新了栈顶最小值
     * @param val
     */
    public void push(int val) {
        stack.add(val);

        if (minStack.isEmpty() || minStack.peek() >= val) {
            minStack.add(val);
        }
    }

    /**
     * 删除栈顶的元素
     * 判断将pop()出去的元素值是否是minStack栈顶元素值(即最小值),
     * 如果是则将minStack栈顶元素一起pop(),
     * 这样可以保证minStack栈顶元素始终是stack中的最小值。
     */
    public void pop() {
        if (!stack.isEmpty()) {
            if (stack.pop().equals(minStack.peek())) {
                minStack.pop();
            }
        }
    }

    /**
     * 获取栈顶元素
     * @return
     */
    public int top() {
        if (!stack.isEmpty()) {
            return stack.peek();
        }
        throw new RuntimeException("栈中元素为空,此操作非法");
    }

    /**
     * 检索栈中的最小元素
     * 返回minStack栈顶
     * @return
     */
    public int getMin() {
        if (!minStack.isEmpty()) {
            return minStack.peek();
        }
        throw new RuntimeException("栈中元素为空,此操作非法");
    }

}
- End -
一个努力中的公众号
关注一下吧
技术分享图片

LeetCode - 最小栈

原文:https://www.cnblogs.com/maggieq8324/p/14986379.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!