設計乙個支援 push ,pop ,top 操作,並能在常數時間內檢索到最小元素的棧。
push(x) —— 將元素 x 推入棧中。
pop() —— 刪除棧頂的元素。
top() —— 獲取棧頂元素。
getmin() —— 檢索棧中的最小元素。
示例:輸入:
[「minstack」,「push」,「push」,「push」,「getmin」,「pop」,「top」,「getmin」]
[,[-2],[0],[-3],,,,]
輸出:[null,null,null,null,-3,null,0,-2]
解釋:minstack minstack = new minstack();
minstack.push(-2);
minstack.push(0);
minstack.push(-3);
minstack.getmin(); --> 返回 -3.
minstack.pop();
minstack.top(); --> 返回 0.
minstack.getmin(); --> 返回 -2.
pop、top 和 getmin 操作總是在 非空棧 上呼叫。
解題關鍵:
設計乙個儲存當前棧中最小元素的棧。
思路:題目要求getmin()的時間複雜度為o(1),所以呼叫getmin()時只能做時間複雜度為o(1)的操作,一般是直接返回棧中最小值。如果演算法的時間複雜度要設計成o(1),只能利用乙個輔助棧,棧頂總是對應原棧元素的最小值,那麼這個棧會有兩個屬性:乙個是棧底到棧頂的元素都應該是從大到小的,另乙個是棧的大小與原棧相同。入棧時,原棧入棧,再判定輔助棧是否空,若空則將待插入元素入棧,這個操作用於初始化輔助棧。若輔助棧不空,則將待插入元素與棧頂比較,將較小元素入棧,這樣每次插入的元素都比棧頂元素(前乙個元素)更小,即每次都插入了原棧元素的最小值。當原棧出棧時,輔助棧也要出棧,因為原棧已經退回到上一次狀態了,所以輔助棧的棧頂也要被彈出,更新後的棧頂就是原棧的上一次最小值。
偽**:
class
minstack
pop():
top():
getmin()
:}
class
minstack
void
pop(
)int
top(
)int
getmin()
};
力扣 155 最小棧
設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。class minstack public void pop public int top publi...
力扣155 最小棧
設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。法1 使用乙個新棧,棧頂表示原棧中最小值,每次往原棧插入時,若小於等於新棧頂,則同時插入新棧,出棧時,...
力扣 155 最小棧
設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 輸入 minstack push push push getmin pop top getmin...