iT邦幫忙

2022 iThome 鐵人賽

DAY 13
3

如果讀者是電資學院的學生大學有修過演算法/資料結構
最基本的169題(扣掉hard)複習再練習一下差不多起跑點就是從這邊開始了
(很多人可能當初很久沒仔細實作或是早就忘光了)
(也要謹惕自己跟完全沒基礎的人的差距其實沒有很大)
接下來常常會遇到一些以前根本沒學過,
比賽才會用到的演算法像是雙指針或是位元操作之類的

從169題到500題基本上沒有什麼好分享的
就是再多寫多練多複習

所以問題變成是169題寫完之後
要挑哪寫題目來寫

筆者在這個階段的時候是像這篇文章一樣
[心得] 我的leetcode刷題清單- 看板Soft_Job - PTT網頁版
自己寫了一個python script去爬讚/倒讚比最高的題目
確實寫這些題目就不會寫到太雷的題目
但後來發現缺點就是一些很優質/可以學到很多東西的題目其實不一定會有很高的讚倒讚比
而且大家常常會偏好那種有點巧妙解的題目,或是有些明明很無聊的題目讚很多
以及常常會有很多topic會練不到

筆者建議比較好的方式如同之前的文章:

督促自己參加Leetcode周賽/雙周賽
以寫完前兩題為目標,第三題寫出來算賺到,在比賽的時候就會知道哪些主題是你還不熟的
就再挑那些主題出來,搭配官神的Github做分類加強重點複習

如果週間沒有比賽需要練習,可以同上一篇文章,用零神的網站找出難度和自己程度相近的題目+-100
隨機練習,然後挑不熟的主題重點複習

這個階段筆者認為很重要的topic重點:

  • linked list的題目
  • tree path sum/前中後序traversal(以及用stack)之類的題目
  • 經典的 binary search 題目
  • 經典的 greedy 題目
    jump game之類的
    interval相關題目
  • 經典的 DP 題目
    LCS
    coin change
    best time buy sell stock
    max subarray (Kadane的變化題)
    走迷宮型
  • LIS
  • 經典的backtrace (8 queens/combinantion/permutations/subsets)
  • two pointer/sliding window
  • DSU(Disjoint set)
  • dijkstra
  • topological sort的題目
  • 一些subarray和subsequence的題目
  • 最簡單的bit manipulation
  • 一些簡單的math主題的題目

注意到這邊推薦的重點和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)
在他們做

  1. sorting with custom comparator
  2. binary search(lower_bound/upper_bound/bisect_left/bisect_right等等)
  3. 用set(ordered set)去重或是multiset從小大到遍歷
  4. hash map以及key error的時候的default值
  5. 操作min max heap
    的時候都看得懂(那你就不是新手了Orz),那確實是愛寫什麼語言寫什麼語言

但如果以上的操作你聽都沒聽過,那可能連解答區都會看得霧煞煞
(當然javascript/php/golang/kotlin等等解答區也會有很多文章可以看,但是寫得好的文章就會變少很多)

(題外話,筆者覺得js真的超級不適合拿來寫leetcode…)
https://ithelp.ithome.com.tw/upload/images/20221027/20152262OoeqdrfTXo.jpg

而且在面試/比賽的時間壓力下,熟悉每個語言常用的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的很愛考
如果看到記得不要跳過


上一篇
你可能不知道的 Leetcode 小知識
下一篇
500+
系列文
0到100的軟體工程師面試之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
maxlivinc
iT邦新手 5 級 ‧ 2023-11-04 03:46:39

刷完 168 題了,準備邁入 500 👍 感謝大佬攻略

我要留言

立即登入留言