LeetCode - 最小棧
阿新 • • 發佈:2021-07-08
前言
/**
* @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("棧中元素為空,此操作非法"); } }