棧和佇列專題

2022-07-26 23:30:20 字數 789 閱讀 3572

本專題用於總結在刷題過程中用到的有關棧和佇列相關的知識點。

api: ⚠️ 棧:取棧頂元素是peek(),而不是top()

佇列:入佇列是add 或者 offer .而不是push

出佇列是poll()

取隊頭也是peek()

通常棧是不考慮排序的資料結構,要找棧中的最值,通常需要o(n) 的時間。要求你給出乙個o(1)時間求的最小值的演算法。

解: 如果考慮在棧中保留乙個臨時變數儲存最小值,那麼一旦該最小值出棧,則無法維護新的最小值。

所以,在這裡考慮了乙個新的方法: 即使用乙個資料棧保留資料,同時使用乙個輔助棧。該輔助棧儲存當前的最小值。

資料棧每進行一次push操作,在輔助棧中就存一次當前的最小值。

解: 棧s1 用於入棧,直接模擬入佇列操作。

棧s2 用於出棧。如果它是空的,那麼先把s1 的元素依次出棧,再依次入s2棧。對s2進行pop(),就模擬了出佇列

如果它是非空的,則直接出棧即可。

解:兩個佇列q1,q2.

模擬入棧:如果q1 、 q2均為空,那麼任選乙個佇列,入佇列即可。如果有乙個不為空,則入該佇列。

模擬出棧:另乙個佇列是空的,將非空佇列中的元素,僅保留最後乙個元素,其前面的元素依次進入空佇列。最後乙個元素出佇列,即可以模擬後進先出。      

演算法專題 棧和佇列

在j a中棧使用arraydeque和linkedlist,這兩個集合類既實現了list介面,也實現了deque介面。因此以上集合類可以當棧也可以當雙端佇列使用。1 使用兩個棧完成getmin功能,分別為data棧和min棧 壓入規則 將資料壓入data棧,判斷min棧是否為空 彈出規則 將data...

leetcode專題訓練 棧和佇列

1 155.最小棧 設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。解答 兩個棧,乙個維護最小值 2 150.逆波蘭表示式求值 根據 逆波蘭表示法,求...

單調佇列,棧專題

a題 hdu 1506 題目大意 給你n個點,每乙個點代表當前座標下的矩形的高度,然後問你最大的矩形面積。具體思路 我們可以用乙個棧維護最大值,這個棧內的元素都是保持單調的,如果當前輸入的數比棧頂元素小的話,這個時候我們先算一波棧裡面的最大值,判斷停止的時候是當棧頂元素比當前輸入的元素小的時候停就可...