1. 程式人生 > >【內功】基礎演算法——棧和佇列

【內功】基礎演算法——棧和佇列

導語:

下面兩個連結是我的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)