如何克服初期瓶頸?LeetCode初學者的刷題經驗分享

更新於 發佈於 閱讀時間約 8 分鐘

前言

這篇文章不是一個資深軟體工程師給新手的建議,也不是一個如何拿到頂尖公司offer的方法,這是來自一個LeetCode初學者的經驗分享。也許藉由我這個剛起步不久、沒什麼經驗、刷題數甚至不到100題的人來分享剛入門的經驗,能夠讓跟我處在相同階段的人多一點信心。讓你知道,除了你在網路上找到那些動輒500題、甚至千題以上解題經驗的大神,又或是一路過關斬將,offer拿到手軟的強者之外,也有像我這種,解easy花三小時解到崩潰哀哀叫的人在。

接下來我會分享我的解題與面試經驗,以及兩個我在練習前期陷入的瓶頸,希望能夠幫助跟我處在差不多階段的人。

首先附上人權

raw-image

Coding Interview 經驗

三次線上的coding test,都是自己在家中線上解題,不需要與面試官互動,結果是都沒上。

  • 第一次 趨勢科技

還沒寫過LeetCode,想說大學研究所都有寫過程式,可以直接試試看,結果幾乎都不會寫。

  • 第二次 新思

考C++,那時很認真準備,解題狀況還不錯,五題只有一題沒跑過所有test case。

  • 第三次 新加坡 鈦坦

考C++, SQL, Rest API(大概吧,老實說我連題目都沒看懂),那時忙著趕論文疏於練習,C++的題目應該是easy,但我當下大腦直接打結,結果一題都沒寫出來。

起步

2022下半年,碩二上學期,因為看到了Google的校園徵才消息而因緣際會開啟了刷題之旅。此時心態是帶點FOMO(fear of missing out)的,因為網路上大部分找到的心得分享各個都是大神,深怕自己不趕快練習會找不到工作。我依照原子習慣、刻意練習的原則還有剛學到的專案管理方法制定了練習計畫與目標,希望藉由持續且高品質的練習,能讓我快速的掌握演算法以及資料結構。訂定計劃是個不錯的起步,但很快實際練習情況的挫折就排山倒海的襲來。接下來就分享我在練習中遭遇到的問題,以及我目前的解決方法。

目前遇到的幾種問題大致可以分為兩類:

  • 基礎知識不足
  • 太過刻意練習

基礎知識不足

我依照計畫,點開題目就開始寫。但很快就發現,我根本不知道從何處著手,有些題目在讀完題目後,腦袋可能會有個朦朧的解題輪廓,但大部分的情況是讀完題之後,完全沒有想法。

我當時的狀況,好比沒上過高中課程就直接拿學測、指考歷屆試題來寫,每一道題目對我來說都是互相獨立的,我在這個過程中歸納不出題目背後某些可能的關聯性,比如說類似的模式、相似的演算法或資料結構。雖然每題都有解答,但看完解答後,學到的東西就只能拿來解這題,沒辦法把背後的原理延伸到其他題目。這是直接使用bottom-up learning會帶來的缺點:缺乏對知識系統和結構化的學習,導致難以將所學應用於更廣泛的領域或理解問題的更深層次。

為此我改變了學習計畫,我利用AlgoMonster補足了前期的基礎知識不足,AlgoMonster把各種熱門的演算法與資料結構拆解成更細小的章節,一個步驟一個步驟的引導解題的思路、流程,剖析題目背後的模式,最後再讓你實際下去解題,算是一種top-down learning 的方式。

經過AlgoMonster的練習,我對各種題目的掌握度高了不少,這包括更容易辨識題目是在考哪種演算法或資料結構,以及能夠從大腦中提取該解法的實作模式,結合top-down 與 bottom-up 的學習方式提升了不少成效,算是帶我跨過了初期的瓶頸。

太過刻意練習

前面提到,我參考了原子習慣以及刻意練習的內容。但後來我發現,部分對於刻意練習原則的誤用,反而拖累了我的練習狀況。

刻意練習強調,如果在練習的過程中感到痛苦和挫折,那正是你在學習與成長的時機。因此,我在練習初期,刻意的不尋求任何輔助資源,不看提示、不查資料,因為在沒有任何幫助的情況下解題時超級痛苦,解個easy的題目花了三個小時以上都是常有的事,而我把它視之為學習與成長的必經之路,心想我解的這麼痛苦,一定可以進步飛快吧。然而,正是這樣的痛苦,讓我漸漸地對開始寫LeetCode感到畏懼,也因為解題時間拉太長,如果沒有充裕的時間,我就不想打開LeetCode刷題,這間接違反了原子習慣的原則,當執行習慣的難度過高,很容易讓自己產生拖延。

運氣很好的,ChatGPT的誕生解救了我。

ChatGPT可以超大幅度地降低LeetCode的學習門檻,他相當於一個私人家教,能夠根據你的狀況回答問題,這是過去LeetCode社群討論區或是Google搜尋沒辦法做到的事情。像我常常會照著自己的思路解題,寫到後面發現遇到瓶頸卡住,但是到討論區卻發現沒有人跟我的解題思路一樣,所以沒辦法得知為什麼我的方法不好或是錯在哪裡。

下列是幾種ChatGPT的使用情況

  • 程式優化。
  • 程式除錯。
  • 計算Big O。
  • 解釋程式碼。
  • 扮演coding interview面試官與之互動、討論。
  • 給予解題提示、引導而不直接給解答。

能夠客製化的回答問題真的是很可怕的能力,這能縮短超級多卡關的時間,並且得到更即時、有幫助的回饋。

最後分享一下我的解題流程,釐清流程可以幫助自己找到哪個環節是弱項並加強。

  1. 仔細讀題、限制條件。
  2. 根據對題目的理解,條列一些重點包括:可能會用到的演算法、資料結構,可能要注意的special case,可能可以幫助提升效率的題目細節。
  3. 寫下大致流程並思考解法的時間、空間複雜度 (Option:與ChatGPT討論解題思路,看看要繼續使用這個方式解題,亦或是需要換個思路)。
  4. 在紙上寫下實際的程式碼、並檢查與上一步驟寫下的流程是否一致。
  5. 挑幾個test case,逐行走過程式碼檢查是否能依照預想的運行。
  6. 在LeetCode頁面實作程式碼,並視情況增加test case。
  7. 不管提交成功與否,都可以把程式碼貼給ChatGPT看是否有優化的空間。

最後,記得設定解題時間,沒解出來就認輸尋求解答,並存下題目日後再回來練習。我認為這個限制蠻重要的,才不會讓自己無限的延長解題時間,形成拖延。

區分解題流程,可以幫助自己很快速地分析自己的缺點,後續比較容易針對這些弱項做加強。舉例來說,剛開始練習時,我很常卡在流程三,因為缺乏基本的演算法、資料結構知識,所以我沒辦法辨識題目可能要考的面向,或是寫出相對應的演算法,而這個部分在我經過AlgoMonster的練習後就大幅地改善了。另一個很常卡住的環節是流程四的把解題思路轉換成實際的程式碼、debugging、優化,這部分透過ChatGPT的輔助就可以讓自己不會卡在同一個瓶頸太久。

總結

這篇文章與其說是經驗分享,其實更像是在與自己對話。從開始練習到現在大概過了半年,我認為我的練習進度並不快,經驗也不算豐富,但如果等到出關了才回頭寫下文章,很可能早已忘記早期經歷過的掙扎。

下面總結一下文章

  • 一開始不要直接刷題,先對演算法與資料結構有一定認知與實作能力後再開始也可以。
  • bottom-up 加上 top-down learning 可以帶來更好的學習效果。
  • 使用ChatGPT輔助解題流程,降低難度。
  • 訂定解題時間,如果超過時間就放棄看解答,可以儲存題目,日後再回頭解一次。不要無限延長解題時間。
  • 區分解題流程,比較容易找到並針對自己的短處做加強。
  • 不需要FOMO。

如果你也才剛起步,歡迎留言讓我知道自己不孤單。

raw-image



留言
avatar-img
留言分享你的想法!
avatar-img
劉品言的沙龍
1會員
11內容數
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
小時候我的數學很好,有些同學會覺得那是因為我去補習,做了很多額外的題目練習 其實我念書時從來沒有多做「超過一本參考書」的題目,那本參考書是學校老師指定要買的,我做的事就是從第一頁第一題做到最後一頁最後一題 如此而已!
Thumbnail
小時候我的數學很好,有些同學會覺得那是因為我去補習,做了很多額外的題目練習 其實我念書時從來沒有多做「超過一本參考書」的題目,那本參考書是學校老師指定要買的,我做的事就是從第一頁第一題做到最後一頁最後一題 如此而已!
Thumbnail
分享雅思(IELTS)首戰的準備之旅與實戰經歷。
Thumbnail
分享雅思(IELTS)首戰的準備之旅與實戰經歷。
Thumbnail
去年底,萌起了想再考一次多益的想法。 印象中上次考多益測驗是大一的時候,那時剛考完指考不久,自以為還有點英文實力所以就去裸考,殊不知只考了300-400分!哈哈。 在那之後就沒有想要再去嘗試。
Thumbnail
去年底,萌起了想再考一次多益的想法。 印象中上次考多益測驗是大一的時候,那時剛考完指考不久,自以為還有點英文實力所以就去裸考,殊不知只考了300-400分!哈哈。 在那之後就沒有想要再去嘗試。
Thumbnail
這篇要講雅思準備 我從大學畢業後到要準備出國,有將近十年沒有碰英文,一路上都是靠google大神過活 我的雅思之路真的非常坎坷阿….. 一路上考了10次以上,寫作還一直卡在5.5這個關卡 不過連一個英文這麼爛的人,都可以考過雅思了,我相信應該很多人也可以,只是要付出時間,以及要有下一次就可以
Thumbnail
這篇要講雅思準備 我從大學畢業後到要準備出國,有將近十年沒有碰英文,一路上都是靠google大神過活 我的雅思之路真的非常坎坷阿….. 一路上考了10次以上,寫作還一直卡在5.5這個關卡 不過連一個英文這麼爛的人,都可以考過雅思了,我相信應該很多人也可以,只是要付出時間,以及要有下一次就可以
Thumbnail
從小學三年級升到四年級,課程的不一樣尤其數學的除法。我總覺得老師教太快,我在課堂上根本追不上,聽不懂,可是看看周圍的同學,大家似乎都明白。我不好意思舉手發問,只好一直問坐在隔壁的同座。還有馬來文居然有兩張paper!
Thumbnail
從小學三年級升到四年級,課程的不一樣尤其數學的除法。我總覺得老師教太快,我在課堂上根本追不上,聽不懂,可是看看周圍的同學,大家似乎都明白。我不好意思舉手發問,只好一直問坐在隔壁的同座。還有馬來文居然有兩張paper!
Thumbnail
前文提到我按照某公司培訓營的指示自學了Scratch,並完成了一個不太理想的「半成品」程式。幾個月後,我參加了另一個課程,不同的是這次是使用PHP,為期三天(週三至週五),每天上課四小時,總計約12小時。課程內容包括基礎語法與環境架設、網路爬蟲、實際構建購物車並與資料庫進行串接。
Thumbnail
前文提到我按照某公司培訓營的指示自學了Scratch,並完成了一個不太理想的「半成品」程式。幾個月後,我參加了另一個課程,不同的是這次是使用PHP,為期三天(週三至週五),每天上課四小時,總計約12小時。課程內容包括基礎語法與環境架設、網路爬蟲、實際構建購物車並與資料庫進行串接。
Thumbnail
我依舊維持著修習 JS 的步伐,但我仍然覺得自己對 JS 的熟悉度不足。在 JS 班開課後,我藉由刷題庫和做 side project 專題,填補了課前的不自信感和知識焦慮。最終我們小組在 2.5 個月內開發了一個訂閱制電商網站的前後台,我也參加了 F2E week1 完賽,獲得銀級徽章
Thumbnail
我依舊維持著修習 JS 的步伐,但我仍然覺得自己對 JS 的熟悉度不足。在 JS 班開課後,我藉由刷題庫和做 side project 專題,填補了課前的不自信感和知識焦慮。最終我們小組在 2.5 個月內開發了一個訂閱制電商網站的前後台,我也參加了 F2E week1 完賽,獲得銀級徽章
Thumbnail
前言 在這篇文章中,我會分享我之前拿到Google New Grad Offer的刷題方式,以及找到的資源~想要知道面試流程的朋友們,可以看我之前的文章,都有分享過詳細的心得囉~ 準備方式 Overview 我自己是參考蠻多其他人整理出來的題目列表,主題混著刷,比較不會因為看到主題就被影響。然後如果
Thumbnail
前言 在這篇文章中,我會分享我之前拿到Google New Grad Offer的刷題方式,以及找到的資源~想要知道面試流程的朋友們,可以看我之前的文章,都有分享過詳細的心得囉~ 準備方式 Overview 我自己是參考蠻多其他人整理出來的題目列表,主題混著刷,比較不會因為看到主題就被影響。然後如果
Thumbnail
這可能是全天下的人學習時都會遇到的問題 那天閒暇逛了臉書看到某網友在社團上發問,他自述自己花了錢買了許多課程,也都學完了,但他不知道下一步該如何繼續下去,所以上來求助。 求學之路漫漫,祝願修習有成,得道日增!
Thumbnail
這可能是全天下的人學習時都會遇到的問題 那天閒暇逛了臉書看到某網友在社團上發問,他自述自己花了錢買了許多課程,也都學完了,但他不知道下一步該如何繼續下去,所以上來求助。 求學之路漫漫,祝願修習有成,得道日增!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News