1. 程式人生 > >lintcode 12 帶最小值操作的棧

lintcode 12 帶最小值操作的棧

log tac oid body ++ 目的 necessary class 沒有

class MinStack {
public:
    stack<int> num;
    stack<int> mins;
    MinStack() {
        // do intialization if necessary
    }

    /*
     * @param number: An integer
     * @return: nothing
     */
    void push(int number) {
        // write your code here
        if( mins.size()==0 || mins.top() >= number) {
            mins.push(number);
        } 
else { mins.push(mins.top()); } num.push(number); } /* * @return: An integer */ int pop() { // write your code here int t; if(mins.size()>0 && num.size()>0){ t=num.top(); num.pop(); mins.pop();
return t; } else { return 0; } } /* * @return: An integer */ int min() { // write your code here if(mins.size() > 0 && num.size()>0){ return mins.top(); } return 0; } };

這個題目的思想是,肯定要有一個結構來保存最小值。

起初我想的是可以只用一個數就能保存最小值嗎,顯然不太可能,因為我們只能訪問棧頂獲得數據。

那麽就用第二個棧來保存這個最小 數據,又是不是不用保存多個數據,在每次彈出壓入的時候就把數據整理好?也不太可能,因為在數據出棧的時候,那相應min堆棧裏的也要出去,並不能保證它就在棧頂,所以這也不可能。

所以只能是保存每一次對數據棧進行操作時候的最小值。

另外,還有一個細節,這裏C++的pop()是沒有返回值的,只能用top()去獲取值。

lintcode 12 帶最小值操作的棧