lintcode 12 帶最小值操作的棧
阿新 • • 發佈:2018-01-17
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 帶最小值操作的棧