LintCode 12 帶最小值操作的棧

2021-07-27 02:16:48 字數 908 閱讀 3403

實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。

你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o(1)時間內完成。

注意事項

如果堆疊中沒有數字則不能進行min方法的呼叫

如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1
這道題有二種常規的演算法,一種是額外用乙個輔助棧存最小值;另一種就是將棧值都存為與最小值的差,因為一次只能出棧乙個數,所以我們只需要適時的改變minnumber的值就可以了(第二種方法目前適用於數字),在push的時候,我們將小於當前最小值的數,存為負數,值為二數之差,這樣在pop的時候就可以根據是否為負數來判斷是否需要變為上乙個最小值,即棧值為負數時,當前最小值為實際的棧值,負數的值為為比上乙個最小值小多少。相當於,每個數都記錄了上乙個push前的最小值。

下面給出第二種方法,第一種方法實現非常簡單,請讀者自行實現。

class minstack 

void push(int number)

if (top == -1) else

if (number < minnumber) else

}int pop()

if (numstack[top] >= 0) else

}int min()

return minnumber;

}~minstack()

private:

int *numstack;

int top;

int minnumber;

};

Lintcode 12 帶最小值操作的棧

中文english 實現乙個棧,支援以下操作 要求 o 1 開銷.樣例 2 輸入 push 1 min push 2 min push 3 min 輸出 1 1 1保證棧中沒有數字時不會呼叫min 借助最小輔助棧,每次呼叫min方法,返回最小輔助棧的棧頂元素 public class minstac...

lintcode 12 帶最小值操作的棧

class minstack param number an integer return nothing void push int number else num.push number return an integer int pop else return an integer int m...

LintCode練習 12 帶最小值操作的棧

題目描述 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。樣例如下操作 push 1 pop push 2 push 3 min push 1 min 返回 2,1 思路 使用兩個列表mda...