實現乙個最小棧,一步一步優化,從額外空間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
0
211
-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...