與 AI 共舞:我的 LeetCode 刷題之道(上)準備篇
最近,我剛結束了 iThome 鐵人賽的寫作之旅——真是不輕鬆,但值得!
隨著比賽結束,我開始進入求職準備的第二階段——學習演算法(主要是 LeetCode 刷題)和系統設計。
老實說,我一直很排斥刷 LeetCode,因為感覺很「填鴨」,一點也不吸引人。
這可能是因為這件事和求職面試掛勾,所以讓人有壓力;又或者我還沒有真正領略資料結構與演算法之美。
總之,我很逃避!
但這次不同了。
我找到了一個全新的方法,讓刷題不再那麼痛苦,還幫助我盡可能理解每一道題——這都要歸功於 AI。
我將分享如何透過 AI 輔助來提升刷 LeetCode 的學習效果。關鍵是——它讓原本枯燥的過程(對我來說)變得有趣。
當然,這樣的方法也有一些「限制」,後續會提及。
我將這個主題分成上、下兩篇,各有不同的著眼。
上篇:準備篇
依不同的刷題目的,說明適合與不適合本文的讀者。
然後是兩項前置準備,包括演算法學習教材與刷題清單推薦。
接著是 AI 輔助學習的方法論,這是我個人的看法與歸納。
最後則是關於這個刷題法的「原則」介紹。
下篇:實戰篇
分享我和 AI 一起刷題的具體流程、做法。題目就是那些,沒什麼特別,其中的重點在於「我的個人經驗」——怎麼做比較好,而哪些方式可能不妥。
我會以實際的 LeetCode 題目作為範例,展示我如何運用 AI 來增進解題與學習效果,包括和 AI 的對話過程。
小結
要闡述的內容眾多(本文就有 3000 字),不得不拆分篇幅,降低讀者的認知負擔。
而且,分成兩篇的另一個好處是:當你需要回過頭來參考時,只要看下篇就足夠了。
此外,如果已有自己的刷題習慣,只是想參考一下我的做法,那跳過本文直接看實戰篇也無妨。
接下來,介紹本文的輪廓。
本文主旨與目標讀者
本文闡述如何運用 AI,將 LeetCode 刷題變成一種「互動式的學習之旅」。
我們的首要目標是——有效降低刷題的痛苦與排斥感!(這不止和 AI 有關,還包括了選用的教材、個人動機、心態等)
這方法不僅讓刷題變得有趣,還能幫助我們理解每道題目背後的演算法思維。換言之,你會學得更好。
如果你和我一樣,曾經對 LeetCode 感到困頓或厭倦,希望尋找一個更有效、更愉快的學習方式,這篇文章將會對你有所幫助。
目標讀者
本文特別適合下列讀者:
- 討厭機械式刷題、希望刷題不止是為了面試的人
- 想了解如何利用 AI 助手提升學習效率的人
- 不想刷太多題的人!(沒錯,你沒看錯,後面會闡述為何不多刷題)
尤其要強調——本文非常適合演算法初學者,俗稱「小白」。
不適合的讀者
有光有就影,我覺得本文可能不適合下列讀者:
- 已有豐富刷題經驗的人
- 希望在短時間內刷大量題目以通過面試的人
- 偏好傳統學習方式,不太習慣使用 AI 輔助工具的人
這類讀者通常已有自己的學習方式或目標,可能與本文的方法不太契合。
開始正文,我們從刷題前的「前置準備」說起。
具體而言,有兩個前置準備:自學教材與刷題清單。
前置準備一:演算法自學教材推薦
像我這類半路轉職且演算法基礎為零的人。先讀過一些教材再開始,肯定會比較好。
但不必事先就花大量時間,可以學習教材到一定階段後,比如最常見的 array 和 linked list,就開始練習相關題目,讓理論與應用相輔相成。
關於教材選擇,我嘗試過好些書或線上課,從結果來看,只能說不盡理想。
但其中還是有些優質資源,特別適合初學者。
以下是我推薦且正在使用的教材,它們相當程度考慮了無基礎者的自學需求。
一、《Hello 演算法》
這是一個網站(線上版的電子書),本質上是一個 GitHub 開源專案。目前已有繁體中文版,同時也出版了實體書。
本書完全面向新手,還搭配了各種實用的動畫幫助理解——這是實體書辦不到的。
此外,它支援多種程式語言,能滿足不同開發者對熟悉程式碼範例的需求——這也是實體書無法擁有的優勢。
二、《大話資料結構:全新彩色版》
這本《大話資料結構》和更加知名的《大話設計模式》是同一位作者。
書中有大量插圖幫助你理解,更重要的是,作者在自序中強調,這是一本面向「自學」的教材。
所以很多概念都會從頭講起,不會讓你有囫圇吞棗之感。
我個人已經讀完一輪,覺得確實有做到上述承諾。不過書中仍有少數比較進階的內容,我都是先跳過——建議你也如此。
附帶一提,本書的實作語言是 C,所以我閱讀時比較少看程式碼實作,而是著重於圖示和觀念的理解。
教材部分,以上兩樣就足夠了!
有些人可能注意到,我並沒有推薦大多數刷題者所熟知的《提升程式設計師的面試力|189道面試題目與解答》,不是它不好,只是我還沒看而已😅
前置準備二:刷題清單
有了書可以作為參考,接著就從第 1 題直接開刷了嗎?當然不是。
LeetCode 題目成百上千,題海茫茫,所以我們還需要「刷題清單」,它們能幫助我們更有效地學習。
尤其對於初學者,信心很重要!刷題的路徑也是。
這意謂著挫折感不能太多,不然容易半途而廢。
這些精心挑選的題目,涵蓋了各種基本且常見的演算法和資料結構,讓我們能夠系統性地提升自己,循序漸進。
這裡,我要介紹兩個廣受歡迎的題單:Grind 75 和 NeetCode 150。
Grind 75
A modern Blind 75 you can customize, by the author of Blind 75.
由 Blind 75——可能是史上最知名的 LeetCode 刷題清單——的作者,經過改良之後的新版。
用網站的方式呈現,而且加入更多功能!不再是固定的 75 題。而是可以讓你依照實際的準備時間,選擇更多(最多 169 題)或更少。
網站會依照你設定的條件,顯示你應該刷哪些題目,以獲得最高的刷題 CP 值。
Grind 75
這是我目前的刷題進度,我選擇了「Group by Weeks」、「Order by Difficulty」,這樣會從 Easy 題目開始一一列給你。
NeetCode 150
The NeetCode 150 is the Blind 75 plus 75 more problems. It’s a more beginner friendly and comprehensive list.
和上述網站大同小異,這 150 題是以 Blind 75 為基礎加以擴充。
兩者主要的差別是,作者是個知名 YouTuber。所以這 150 題都有影片版的題解,可作為你學習上的參考。
如果只是單純想要題單,那 Grind 75 應該就足夠了。
講完了前置準備,我們還有一件事要聊聊。
本文標題既然叫「刷題之『道』」,那就要展現一點獨特的價值觀,以符合「道」這個字的重量與意涵。
而我認為,這其中的道,關鍵就在於——如何與 AI 互動。
AI 的兩種用法:快與慢
我將 AI 的使用方式(互動模式) 分為兩種:「快速模式」和「深度模式」。
快速模式
所謂的「快速模式」,就是讓 AI 幫你做那些,人類做起來很慢、很無聊,但機器做卻非常輕鬆的活。
大概就是各式各樣需要自動化的繁瑣任務,比如整理報表、改錯字之類的。
不用說,這類的需求還挺多的。
甚至你有一個程式開發上的需求,想知道怎麼寫,直接問它,叫它給出程式碼——直接拿來用,而不管其中的原理。這也是一種「快」。
簡言之,所謂的「快」,就是讓 AI「代替」你做事——包括思考。
深度模式
AI 可以代替你做很多事——通常是那些你不喜歡做的事。
但它(就目前而言)還不能代替你學習。所以學習「本身」往往不適用於快速模式。
AI 確實已經學會了!但你還沒。
而「深度模式」則是與 AI 進行深入的對話與討論,以獲得更全面的理解。
這個模式下,我們要的不僅僅是答案,而是探索問題的本質和背後的原理。通過與 AI 進行深度交流,我們可以激發新的思考,發現自己思維中的盲點,最終達到更高的學習層次。
如同我在「AI 時代的工作者」中說的,這是我喜歡,也是我使用 AI 的主要方式。
相關文章:AI 讓寫作變輕鬆了?我可不這麼認為
快速模式適用於需要立刻解決問題或取得資訊的情況,而深度模式則適合深刻的理解和學習。
在刷題過程中,我們可以靈活運用這兩種模式(但主軸仍是深度模式),以達到最佳的學習效果。
我的刷題原則與價值觀
如前所述,這一篇我們還不會講到具體的做法, 但可以先解釋一些原則與價值觀。
這是我目前刷題的基本原則:
- 每天只刷一題。
- 每天只刷一小時。
- 每一題要盡可能深入理解、釐清細節,或嘗試不同的做法。
這也是為何這個方法並不適合現在就要透過大量刷題來求職的人——它更多是為了長遠打算。
多多益善?
你可能會覺得:「那我一天刷 2 小時,每小時刷 2 題,這樣一天就可以做 4 題了!」
這我不反對,但也不建議。因為太在意刷題的「數量」可能會導致淺層學習,無法真正掌握核心概念。
更重要的是,長時間、高強度的刷題,容易造成疲勞和厭煩感,反而降低學習效率——甚至放棄。
少則得
我是這樣想的:顯然我不太熱衷於刷題,更喜歡做具體的專案。
所以這輩子可能就只會完成 NeetCode 150 或 Grind 75 的最大題數(169 題)。對於「熟悉常見演算法與資料結構」這個命題,我認為這些題目已經足夠。
既然如此,求快就不是重點,數量當然也不是。
同時我們還要考慮到「複習」,畢竟好的學習肯定包含了有效的複習。做的題目不多,對複習反而是一大優勢,至少心理上不會那麼猶豫。
最後補充 Grind 75 作者在 FAQ 中的最後一道問答,很能表達我的想法:
Will you add more questions in future?(問題)
You have time to do more than 169 questions?! The returns on doing questions beyond this list is diminishing and not very recommended. But if there’s high demand, I could add more.(回答)
少則得,多則惑。
上篇結語
本文探討了刷題的準備工作、基本原則和價值觀。
我們介紹了一些有用的資源,比如《Hello 演算法》 或 Grind 75。還討論了為什麼我不打算追求刷題的數量,並解釋了背後的思維。
這些看法不免存在著個人偏好,但也有一定的普世價值。
每個人都有自己的學習風格和目標,對於希望深入理解演算法,而不僅僅是為了應付面試的人來說,本文應該會是個不錯的參考。
下篇中,我將介紹具體的刷題策略和技巧,以及如何運用 AI 助手來最大化我們的學習成果。