跳至主要内容

前言

許多人都知道,大公司很喜歡考資料結構與演算法(Data Structures & Algorithms,簡稱 DSA),所以大家都為了應付面試而刷題。考刷題一直被詬病沒有鑑別度,許多工程師也認為工作上用不到,再加上近幾年因為 AI 工具的盛行,又有更多人覺得刷題沒有意義。

不過有一說一,身為軟體工程師,我認為了解 DSA 還是滿有幫助的,讓人在工作中自然思考如何讓效能最佳化。

而且現實情況是,現在仍有許多公司採用 DSA 來當作面試內容,所以各位再怎麼不願意,想獲得更多機會,踏實學習資料結構與演算法,然後刷題刷好刷滿還是必須的。

身為一個非 CS 科系背景的人,剛開始刷題遇到許多障礙,更不用說前端工程師熟練的程式語言 JavaScript(以下稱 JS),一直都不是刷題的主流。因此,我的筆記主要會從前端工程師的角度出發,和大家分享學習演算法與資料結構的心得。

提示

強烈建議前端工程師直接學習 Python 並用它來刷題

建議利用 Python 刷題的原因如下:

  • Python 寫法很簡單, 和 JavaScript 比起來是事半功倍
  • 在網路上討論 Leetcode 題目的文章,多半會有 Python 的範例,其他語言(例如 Java、C++)的範例就不一定有了
  • JS 缺乏很多相關功能,例如常見的資料結構 heap 在 JS 裡沒有,但 Python 有內建模組 heapq 可以直接使用
  • Python 的通用性已經可視為軟體工程師的基礎語言,如果你和其他領域工程師討論刷題,Python 可以當成共通語言
  • 大多數公司的 coding 面試關卡,不會限定你用哪個語言
  • 刷題是長期抗戰,如果你對解題不感興趣,那刷題絕對是枯燥乏味的事情,盡量簡化這件事才能持續刷題

如果你的目的是為了熟悉某一種程式語言,那麼用該語言刷題會比較恰當,但是以練習 DSA 為目的,那建議就用 Python 吧!

預備知識​

接下來的筆記內容會有實際的程式碼,會有不同程式語言的範例,建議讀者至少熟悉 JavaScript 或是 Python 比較好。

下一步​

如果是第一次接觸 DSA,建議先閱讀 演算法與資料結構是什麼?,裡面除了會解釋核心概念,最後也整理了一份建議的學習順序,照著讀下去即可。

如果想知道這些資料結構在實際系統裡怎麼被用上,可以參考《系統設計系列文》,例如 Database Sharding 就牽涉雜湊分佈的取捨。