跳至主要内容

LeetCode 101: LeetCode 刷題指南 (第二版)

作者:高畅 Chang Gao

語言:C++ & Python

版本:正式版 2.0c,最新版見 GitHub changgyhub/leetcode_101

資訊

一本面向有一定程式基礎,但缺乏刷題經驗的讀者的教科書和工具書。

2019 年底,本書第一版在 GitHub 上正式發佈,反響非常熱烈。過去五年,作者累積了許多工作經驗,也愈發覺得本書存在許多錯誤與不完善之處。因此在 2024 年底,作者重新整理內容,發佈了第二版。

本書分為算法、數學和資料結構三大部分,共計十五個章節,詳細介紹了解 LeetCode 時常用的技巧。在第一版中,為了強行呼應 "101"(在英文中意為入門),作者將題目精簡至 101 道。但隨著面試題型愈加多樣化,第二版新增了一些重點題目,幫助讀者查漏補缺。在選題時,作者兼顧題目在面試中的出現頻率、學習難易度及泛用性。每章節後附有練習題,推薦讀者學習完後使用這些題目進行鞏固。

本書中的所有常規題目均附有 C++ 和 Python3 的解法。由於本書的目的並非教學 C++ 和 Python 語言,作者在行文時不會過多解釋語法細節,並會適當使用一些新 C++ 標準語法和 Pythonic 寫法。至 2024 年底,所有代碼均能在 LeetCode 正常運行,並且在易讀性的基礎上幾乎都是最快或最省空間的解法。

請謹記,解題只是提升面試和工作能力的一部分。在電腦科學的海洋中,值得探索的領域甚多,不建議將過多時間耗在解題上。成為優秀的電腦科學家,除了把解題作為入職的敲門磚,更應打好專業基礎、提升技能並了解最新技術動向。

本書由作者閒暇時間完成,可能存在錯誤或不完善之處。部分題目解釋可能不夠詳細或清楚,歡迎讀者至 GitHub 提 issue 修正,作者將加入您於鳴謝名單(見後記)。若有建議或疑問,請至作者個人網站聯繫,亦可通過郵件或 LinkedIn 傳訊,作者會儘快回復。

感謝 GitHub 用戶 CyC2018 的 LeetCode 題解,為作者早期整理內容提供了幫助。感謝 ElegantBook 提供的精美 LATEX 模板,使得作者能輕鬆將筆記變為專業的電子書。另外,第二版封面圖片為作者於 2024 年 7 月在舊金山金門大橋北方的 Sausalito 小鎮海邊拍攝,當時還買了一份超大杯冰淇淋,可惜太甜吃不下,只能作罷。

若本書對您有幫助,不妨支持作者!

重要聲明

本書 GitHub 地址:github.com/changgyhub/leetcode_101

由於本書目的是分享與教學,本書永久免費,禁止任何營利性用途。歡迎以學術為目的的分享與傳閱。本書所有題目版權歸 LeetCode 官方所有,本書不展示任何付費會員專享題目內容或相關代碼。

簡介

打開 LeetCode 網站,若按題目類型分類,出現次數最多的包括數組、動態規劃、數學、字串、樹、雜湊表、深度優先搜索、二分搜尋、貪心算法、廣度優先搜索、雙指針等。本書涵蓋上述題型以及大多數流行題型,並依照類型分類與難易程度進行逐步講解。

第一大類為算法。本書從最簡單的貪心算法開始,逐漸進階至雙指針、二分搜尋、排序算法與搜索算法,最終講解難度較高的動態規劃與分治算法。

第二大類為數學,涵蓋純數學問題與計算機知識相關的位運算問題。這類問題多用於測試思維靈敏度,實際工作中較少使用,建議優先處理其他類型問題。

第三大類為資料結構,包括 C++ STL、Python3 自帶的資料結構、字串處理、鏈結串列、樹與圖。其中,鏈結串列為樹與圖的子集。最後亦介紹一些更複雜的資料結構,如經典的並查集與 LRU。