1. 程式人生 > 其它 >【刷題筆記3】棧的最小值

【刷題筆記3】棧的最小值

技術標籤:刷題筆記資料結構leetcode

題目

請設計一個棧,除了常規棧支援的pop與push函式以外,還支援min函式,該函式返回棧元素中的最小值。執行push、pop和min操作的時間複雜度必須為O(1)。

示例:

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

題目連結

思路

1.使用兩個系統提供的棧stack1,stack2
2.push操作時向statck1中壓入元素i,如果statck2的棧頂元素大於i,將i壓入stack2否則將stack2的棧頂元素壓入stack2
3.pop操作時將stack1與stack2中的元素同時彈出
4.getMin操作檢視stack2的棧頂元素

圖解

程式碼實現

public class SpecialStack {
        Stack<Integer> stack1 = new Stack<Integer>();
        Stack<Integer> stack2 =
new Stack<Integer>(); public void push(int x) { stack1.push(x); if (stack2.isEmpty() || stack2.peek() > x) { stack2.push(x); } else { stack2.push(stack2.peek()); } } public int pop() {
if (!stack1.isEmpty() && !stack2.isEmpty()) { stack2.pop(); return stack1.pop(); } else { throw new RuntimeException("棧為空"); } } public int top() { if (!stack1.isEmpty()) { return stack1.peek(); } throw new RuntimeException("棧為空"); } public int getMin() { if (!stack1.isEmpty()) { return stack2.peek(); } throw new RuntimeException("棧為空"); } }