如果讀者是電資學院的學生大學有修過演算法/資料結構
最基本的169題(扣掉hard)複習再練習一下差不多起跑點就是從這邊開始了
(很多人可能當初很久沒仔細實作或是早就忘光了)
(也要謹惕自己跟完全沒基礎的人的差距其實沒有很大)
接下來常常會遇到一些以前根本沒學過,
比賽才會用到的演算法像是雙指針或是位元操作之類的
從169題到500題基本上沒有什麼好分享的
就是再多寫多練多複習
所以問題變成是169題寫完之後
要挑哪寫題目來寫
筆者在這個階段的時候是像這篇文章一樣
[心得] 我的leetcode刷題清單- 看板Soft_Job - PTT網頁版
自己寫了一個python script去爬讚/倒讚比最高的題目
確實寫這些題目就不會寫到太雷的題目
但後來發現缺點就是一些很優質/可以學到很多東西的題目其實不一定會有很高的讚倒讚比
而且大家常常會偏好那種有點巧妙解的題目,或是有些明明很無聊的題目讚很多
以及常常會有很多topic會練不到
筆者建議比較好的方式如同之前的文章:
督促自己參加Leetcode周賽/雙周賽
以寫完前兩題為目標,第三題寫出來算賺到,在比賽的時候就會知道哪些主題是你還不熟的
就再挑那些主題出來,搭配官神的Github做分類加強重點複習
如果週間沒有比賽需要練習,可以同上一篇文章,用零神的網站找出難度和自己程度相近的題目+-100
隨機練習,然後挑不熟的主題重點複習
這個階段筆者認為很重要的topic重點:
注意到這邊推薦的重點和169題裡面的重點重複的非常多
也就是你應該要多複習且加深加廣這些topic的題目
像是binary search經典題
Find First and Last Position of Element in Sorted Array
第一次寫可能要理解很久,但是在這個階段(看完官神的影片講解)你應該要可以駕輕就熟才對
或是edge case比較靠北一點的greedy題目
Non-decreasing Array
在寫完第一次看完別人怎麼寫知道他greedy在哪裡之後
這次再寫就應該要能一氣呵成(但忘記也是蠻正常XDDD)
你遲早要練到可以一寫完就bug free的
為何不在這個階段就把這些重要的題目寫到一次bug free
在這邊也要推薦一些好文章
https://leetcode.com/discuss/study-guide/1965086/How-to-practice-for-2200%2B-rating-in-LC
演算法學習之Leetcode 破關總指南(二)
演算法學習之Leetcode 破關總指南(三)
以及這邊也有一份刷題清單
整理的mediuml跟easy題目也都不錯
讀者也可以參考
https://github.com/azl397985856/leetcode
另外
在這裡筆者還想要提供一個又可能會有點爭議的建議:
如果你是新手,又想要刷到500題以上
在挑刷題要用什麼語言的話,
筆者一律推薦用C++/Python/Java三選一來寫
很多人可能寫javascript或是php/golang/kotlin想要用來熟悉自己的語言語法
(如果今天只打算寫169題以下的話就沒差)
但筆者認為,練語法是練語法
可以挑什麼code academy/open source project之類的來練
如果你略懂C++/Python/Java之一的STL(Standard Template Library)
在他們做
但如果以上的操作你聽都沒聽過,那可能連解答區都會看得霧煞煞
(當然javascript/php/golang/kotlin等等解答區也會有很多文章可以看,但是寫得好的文章就會變少很多)
(題外話,筆者覺得js真的超級不適合拿來寫leetcode…)
而且在面試/比賽的時間壓力下,熟悉每個語言常用的STL算是蠻重要的
挑C++/Python/Java來練,資源豐富,想怎麼奇怪的寫stackoverflow都找得到解法
c++:
官神的影片和GitHub解答都寫c++
Python:
Wheels大有幫忙整理超多題目的python code
Programming Live with Larry - YouTube
Java:
看起來就像C++不是嗎XDD 筆者不熟 有厲害的刷題影片講解是用java的話歡迎補充XDDD
要是看不懂這些資源就蠻可惜的
還有大公司的面試官可能會什麼樣語言的面試官都有
但小公司面試官如果不會golang/php,問你會不C++/Python/Java,完全不會當場當機可能就麻煩了
BTW最後一點小補充,
以筆者個人經驗,因為面試官也都懶得再學新的題目,題號前500的很愛考
如果看到記得不要跳過