1. 程式人生 > 其它 >LeetCode - 最小棧

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/ 本文版權歸作者和部落格園共有,歡迎轉載,轉載時保留原作者和文章地址即可。