Member-only story

[LeetCode] 增強自我能力檢視表

--

我這邊列了一下前陣子幾個自己從寫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,在最後整體效能上,速度會比較快。

5.ArrayList set, get, isEmpty are all O(1)

6.For both LinkedList &…

--

--

Angel@Software Engineer
Angel@Software Engineer

Written by Angel@Software Engineer

There are a thousand Angels in a thousand people's eyes. 一千個人有一千個Angel.

No responses yet