LeetCode

前言

/**
 * @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 -
一个努力中的公众号
关注一下吧
以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
作者:95.8℃
本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
原文地址:https://www.cnblogs.com/maggieq8324/p/14986379.html