【內功】基礎演算法——棧和佇列
阿新 • • 發佈:2018-11-28
導語:
下面兩個連結是我的leetcode棧和佇列的分類。
棧:https://www.cnblogs.com/zhangwanying/p/9886577.html (共40題)
佇列:https://www.cnblogs.com/zhangwanying/p/9886581.html(共8題)
一、 先來幾個棧和佇列的基礎題複習。
(1)實現一個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的操作。
(2)怎麼用陣列實現棧和佇列。
棧用一個 index, push 就是 ++index, pop就是 --index
佇列用三個變數,startIdx, endIdx, 和 size (有可能 endIdx < startIdx 的這種情況)
(3)如何用兩個棧實現一個佇列(lc 232),如何用兩個佇列實現一個棧(lc 225)
(4)如何僅用遞迴函式和棧操作逆序一個棧
(5)用棧來求解漢諾塔問題
二、單調棧
它能解決問題就是在 O(N) 的時間複雜度內,找到離一個數數最近的左右兩個比它大或者小(或者說更強的數)(找比它大的數的時候,強就是比它大,同理小也一樣)。
不要求是陣列,資料流也一樣的。
比如說給了一個數組,找到一個數離它最近的最大的左右兩個數。eg, [1, 3, 2, 0, 9, 3, 4, 6] 比如找 離 4 最近的比它大的左右兩個數字就是 [9, 6]
三、單調佇列(滑動視窗 sliding window)