1. 程式人生 > >LeetCode155. 最小棧(MinStack)

LeetCode155. 最小棧(MinStack)

題目描述

設計一個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。

  • push(x) – 將元素 x 推入棧中。
  • pop() – 刪除棧頂的元素。
  • top() – 獲取棧頂元素。
  • getMin() – 檢索棧中的最小元素。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop
(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2.
class MinStack {
public:
    /** initialize your data structure here. */
    MinStack() {
        
    }
    
    void push(int x) {
        stackdata.push(x);
        if (stackmin.empty()){
            stackmin.push(x);
        }
else{ int top=stackmin.top(); if(x<=top){ stackmin.push(x); } else{ stackmin.push(top); //注意此處如果data裡面最新壓入的值比最小值大,min也要把最小值再壓一遍,不然pop以後兩邊的棧不均衡 } } } void pop() { stackmin.
pop(); stackdata.pop(); } int top() { return stackdata.top(); } int getMin() { return stackmin.top(); } private: stack<int> stackdata; stack<int> stackmin; }; /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */