最小棧 最小棧的實現與優化

2021-09-13 10:43:01 字數 874 閱讀 3729

實現乙個最小棧,一步一步優化,從額外空間o(n) 到o(1) 。push,pop,top,getmin都是o(1)時間。

空間消耗o(n),如何優化到o(1).

class minstack1 

void pop()

int top()

int getmin()

};

如何只用乙個棧實現最小棧的實現?

入棧順序:2,1,3,4,-2,0,-2

diff棧的計算 =data - min

出棧的data

最小值diff棧

最小值min22

0211

-1131

2141

31-2-2

-3-20-2

2-2-2-20-2

top: 如何根據diff棧來恢復棧頂top的元素?

push: 如何更新min最小值?

pop: 如何維護min的最小值?

注意:第一次入棧diff的特殊處理。

class minstack3  else 

}void pop()

int top()

int getmin()

};

致命缺點:由於儲存差值,無法解決溢位的可能問題。

**:

最小棧實現

最小棧實現 設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。public class minstack public void push int x ...

實現最小棧

class minstack stack stack new stack stack minstack new stack int stack new int 40 int i 0 int minstack new int 40 int j 0 入棧 對兩個棧都要入棧 每次放入之前需要看最小棧 的棧...

實現最小棧

題目描述 設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧 push x 將元素 x 推入棧中 pop 刪除棧頂的元素 top 獲取棧頂元素 getmin 檢索棧中的最小元素 示例1 minstack minstack new minstack minstack.pu...