155 最小棧(利用兩個棧來得到最小的元素)

2021-10-20 01:59:02 字數 1452 閱讀 8463

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

stack 儲存所有元素,這樣在進行 top 操作時,會返回當前正確的棧頂元素。

min_stack 只儲存比當前棧頂元素小的元素,這樣在每次 getmin 時,取棧頂元素就能得到之前新增的所有數字中最小的。

在 push 操作中,stack 正常入棧,對於 min_stack 要在其棧為空或是當前棧頂元素比新來的元素大(或相等)時才入棧。

若沒有"=",則可能會報空棧異常(下面的例子呼叫了兩次 getmin 方法:在第一次呼叫完 getmin 方法後會返回 0,但又接著呼叫 pop 方法,此時 stack 和 min_stack 的棧頂元素都為 0,均出棧,當再次呼叫 getmin 方法時,會有空棧異常)。

["minstack","push","push","push","getmin","pop","getmin"]

[,[0],[1],[0],,,]

在 pop 操作中,stack 正常出棧,對於min_stack 要在其棧頂元素與 stack 的棧頂元素相同時,才出棧。

class

minstack

//壓棧

public

void

push

(int x)

//出棧(stack正常出棧,而min_stack只有當兩個棧的棧頂元素相同時,才將棧頂元素出棧)

public

void

pop()}

//返回棧頂元素

public

inttop()

//得到最小值

public

intgetmin()

}

時間複雜度:o(1)

演算法 利用兩個棧實現棧排序

棧排序。編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構 如陣列 中。該棧支援如下操作 push pop peek 和 isempty。當棧為空時,peek 返回 1。leetcode.思路 利用兩個棧,分別實現大頂堆和小頂堆,以小頂的棧...

利用兩個佇列實現棧 進棧和出棧

根據兩個佇列實現乙個棧,大致思路與我上篇部落格 根據兩個棧實現乙個佇列 類似 所以直接貼出 兩個佇列實現乙個棧,思路 與 兩個棧實現乙個佇列基本類似 我發過部落格 include include using namespace std template class mystack mystack v...

兩個棧實現佇列 兩個佇列實現棧

1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...