1. 程式人生 > >劍指offer30--包含min函式的棧

劍指offer30--包含min函式的棧

題目描述

定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))。

 

思路:

  • 輔助棧sta2
  • 輔助棧必須要保持次小的元素
    1. 保持兩個棧數量相等(我的做法)sta2可以放入最小的元素
    2. sta2,只看現在放入的是不是小於等於最小值,是的話就放入sta2
class Solution {
public:
    stack<int> sta1,sta2;
    //sta1:真實棧   sta2:輔助棧
    void push(int value) {
        sta1.push(value);
        if(sta2.size()==0||value<sta2.top())
            sta2.push(value);
        else
            sta2.push(sta2.top());
    }
    void pop() {
        sta2.pop();
        sta1.pop();
    }
    int top() {
        return sta1.top();
    }
    int min() {
        return sta2.top();
    }
};