【內功】基礎算法——棧,隊列和堆

導語:

下面兩個連接是個人leetcode棧和隊列的分類。html

棧:http://www.javashuo.com/article/p-kbkwoqyp-mq.html (共40題)數組

隊列:http://www.javashuo.com/article/p-mcpfyyjc-mr.html(共8題)函數

堆:http://www.javashuo.com/article/p-uuiwwbij-kn.html(共31題)spa

1、 先來幾個棧和隊列的基礎題複習。

(1)實現一個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的操做。code

(2)怎麼用數組實現棧和隊列。htm

棧用一個 index, push 就是 ++index, pop就是 --indexblog

隊列用三個變量,startIdx, endIdx, 和 size (有可能 endIdx < startIdx 的這種狀況)遞歸

(3)如何用兩個棧實現一個隊列(lc 232),如何用兩個隊列實現一個棧(lc 225)隊列

(4)如何僅用遞歸函數和棧操做逆序一個棧leetcode

(5)用棧來求解漢諾塔問題

2、單調棧

它能解決問題就是在 O(N) 的時間複雜度內,找到離一個數數最近的左右兩個比它大或者小(或者說更強的數)(找比它大的數的時候,強就是比它大,同理小也同樣)。

不要求是數組,數據流也同樣的。

好比說給了一個數組,找到一個數離它最近的最大的左右兩個數。eg, [1, 3, 2, 0, 9, 3, 4, 6]  好比找 離 4 最近的比它大的左右兩個數字就是  [9, 6]

 

 

3、單調隊列(滑動窗口 sliding window)

 

 

4、堆 

相關文章
相關標籤/搜索