leetcode刷題總結(一)
語言:Java && python,
我的做法:按 tag 刷,刷題同時熟悉資料結構,熟悉自帶的API,
以下tag:
連結串列(LinkedList): JDK中的LinkedList類,
特點:一個接一個,記憶體佔用較大
用途:快速增刪頭尾元素時可以考慮
棧(Stack):JDK8中為 Deque介面,用它作為棧使用,常用的為LinkedList,ArrayDeque,
特點:後進先出,
用途:詞法分析
佇列(Queue):JDK介面:Queue,不過一般我直接使用Deque,這是一個雙端佇列
特點:先進先出
用途:排隊
字典(Map):JDK介面:Map,常用的HashMap, TreeMap,LinkedHashMap,
特點:K-V組合,O(1)時間複雜度
用途:快取,空間換時間
堆(Heap):JDK介面:PrioryQueue
特點:按優先順序進行排序
用途:任務排隊
樹(Tree):JDK未帶此介面
特點:形成一種有層級的結構。類似於連結串列,不過變成了一個節點有兩個子節點
用途:檔案目錄儲存
圖(Graph): JDK未帶此介面
特點:點與點之間屬於多對多的關係
用途:地圖,
PS:有餘力可多學習,我未重點刷此tag
做題技巧:
動態規劃:重點是得到動態規劃方程(B站閆雪菜大佬視訊有講解)
二分查詢:注意邊界條件
雙指標(滑動視窗):滑動視窗也可以用雙指標的形式來實現,視窗定長或不定長均可
深度優先搜尋 && 廣度優先搜尋:感覺dfs更高頻,這兩種解法一般都出現在樹,矩陣,圖等題目中
遞迴(回溯):比如經典的八皇后問題,做題注意剪枝優化時間複雜度
快排:Top-K問題
字首陣列:顧名思義,多出現在Array,List題目中,隱約記得有道關於Tree的題也用到這種思路
位運算:計算優化,不會就最好別寫哈
設計:
比如設計庫表結構
設計某種資料結構等
多執行緒:
下篇~~~