從LeetCode學演算法 - 0

你應該知道的面試基礎和解題技巧

Chih-Yu Lin

--

What is an algorithm?

所謂的演算法,就是描述一個計算/操作的過程,
這個過程可以用有限的長度來描述如何解決問題。
或者更簡單的說法:
演算法,就是解決問題的方法流程。

Why do we need to learn algorithms?

先講一下筆者的經歷:筆者當了7年多的工程師,當中有2.5年和Android kernel/HAL/framework相關,2年跟Android App和一般Software有關,後面則是ML/Deep Learning為主,在面試時也分別面過不同的職位,唯獨幾乎萬變不離其宗的,就是白板題。

面試官拿出一道你見過或沒見過的題目,問你該怎麼解,
你思考後給出回答,並且討論可以改進的方式及可能的錯誤,
這應該是所有面試者都會歷經的流程。

那麼,你是否經歷過這樣的狀況?

「這個題目的類型看起來好眼熟,可是不知道從何下手,該怎麼辦 QQ」

白板題的重點,就在於演算法。掌握好演算法,就跟數學學會公式一樣,
可以將一些複雜的東西簡單化,平常練習的題目多了,
套起公式來自然得心應手,就算題目再怎麼變,也萬變不離其宗。

當然,後面還會衍生出一個問題:一個題目該用哪種演算法比較好?
但這是另一個故事了,我們以後再談XD

Why LeetCode?

那麼,現在網路上可以供作練習的網站相當之多,除了LeetCode外,
你可能還聽過HackerRank及CodeWar等,
那麼為什麼是用LeetCode而不是其他呢?

以筆者的經驗,HackerRank相當適合做為熟悉語言特性使用,但不適合目標是熟練解題的人。你可以在其 “LANGUAGE PROFICIENCY”的分類中針對特定的程式語言一路寫到尾,這樣可以對這個語言有一個比較基本的認識。
而雖然它們有”Interview Preparation Kit”的部分,但相對題目較為簡單,涵蓋範圍也較少。舉例來說,在Tree的分類上只有5題,這一點點的量,其實相當不足。同時,HackerRank的題目往往較長,限制也通常較多,(這裡是指Problem Solving分類),和一般面試會遇到的題目型態較為不同。
但若今天的形式是給你1個半小時解3題的話,
那麼HackerRank的模式就會很適合你。

--

--

Chih-Yu Lin

LeetCode、Python、Java、Android;第11屆iT邦幫忙鐵人賽Software Development組優選(從LeetCode學演算法);HiSKIO特約講師;課程優惠: https://bit.ly/lc2022all ;合作請洽: learnwithdesolve@gmail.com