力扣簡單專欄 155 最小棧

2021-10-22 00:11:16 字數 1242 閱讀 3949

設計乙個支援 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...