Member-only story
[LeetCode] 增強自我能力檢視表
Dec 28, 2020
我這邊列了一下前陣子幾個自己從寫LeetCode練習中,發現不管面試FAAG,或一些不錯的公司,或是工作上的應用都很重要的觀念,大家可以參考當作檢視自己寫程式的過程,不斷突破自己的簡單檢查表。
我寫的題目很少(目前總共301題,150 medium, 120 easy, 31 hard),所以之後也許會繼續增加筆記吧(欸)
只是每一題都能學到蠻多東西,很多知識都容易讓我想到以前工作上的某些project (●▼●;)
1.有些情境,recursive比iterative省空間。
例如你要traverse一個樹狀結構時,recursive的空間複雜度是O(H),iterative則是那一個level的node數目,也就是O(2^H),H是樹高。
2.Binary Search tree vs. binary tree,兩個是完全不同的東西。
在練習tree traversal系列題目時候,你分析時間複雜度時,自己要記得。
因為時間複雜度,一個是O(n),一個是O(H)。
3.在寫tree traversal或2條linked list時候的null判斷寫法
以前我都會寫
if (left == null && right == null)
練習幾題後發現,其實你可以寫成
if (left == right)
4.array跟map,都可以做成key-value的map資料結構概念,但如果你能知道資料量大小,宣告成array,在做add/get時候,速度會比宣告成map快很多。
因為HashMap在新增element時候,如果到達threshold,會開始「rehashing」,底層會new一個空間更大的HashMap,把現有的copy過去,這會花掉不少時間,也是為何面對比較大的資料量時,資料結構使用array,在最後整體效能上,速度會比較快。