你的問題一開始方向就錯了
不是什麼層級的職位不用刷leetcode,而是什麼等級的公司要刷到什麼程度
很多人一提到刷題就很反感
就是因為有一堆公司、面試官根本不知道自己考刷題在考三小(看面試經驗分享就知道)
看人家矽谷的top tier在考就跟著考,以為這樣就可以收到高素質的工程師
然後面試官就隨便去leetcode找幾個題,把答案背一背
面試的時候就看你能不能默寫出他背過的答案
什麼think out loud阿、follow up阿、各種解法trade off都不重要
反正他沒背過的他也看不懂
所以刷題給很多人的印象 = 看誰刷(背)的題多
面試的時候刷過我就默寫給你看,沒刷過就算我衰下次再來
會質疑這種面試的意義在哪裡非常合理
Top tier的話,通常剛畢業的會加面OOD,有工作經驗的會加面system design
不是只有考刷題而已,但是過程跟想要考察的重點是一樣的
就是看你在工作中會怎樣去處理一個困難的任務,並能隨時跟團隊成員(面試官)交流
Onsite的時候,一開始面試官會丟一個敘述相對模糊的題目
需要你自己去詢問清楚題目的需求和邊界(需求分析)
然後跟面試官說明想法,得出一個雙方都認同的可行解(溝通技巧、知識深度和廣度)
接著才是開始實作(Coding能力)
實作完dry run一下解法有沒有bug或沒考慮到的case(Testing)
最後分析performance,到這邊我們已經有一個work solution了
如果時間還夠的話,面試官永遠都可以給你follow up(Scaling)
像是題目條件從一維變二維、求可行性變成求具體方案,input從靜態變成streaming
解法會不會有不同?為什麼?重點是思路清晰、講得清楚自己在幹嘛
像前幾篇好像有在討論要不要recursion,這哪有什麼標準解
Recursion寫起來簡單明瞭,但是怕stack overflow嘛
那你想寫recursion的解就先問面試官input的大小是多少不會爆就寫阿
這樣面試官也就知道你是評估過而不是只會寫recursion嘛
像tree本身就是recursion定義出來的,當然直覺用recursion解阿
反之如果你遇到linked list,問都不問一下input大小就直接recursion,擺明一臉菜樣
不過這是top tier的情況嘛...裡面一堆大神面試官搞演算法競賽出身的
你在面試過程怎麼卡的、卡住的時候思路還能不能保持清晰,水準到哪一看就知道了
還有辦法一直想新題出來考,leetcode題數都爆炸了
只會刷(背)題的,就算30秒內默寫出來最佳解,講不清楚或是follow up就掛也沒用
那一般公司面試官根本沒這能力的,面試就真的是背題扮家家酒
通常都是考leetcode上一模一樣的,也不敢出太難
出太難去面試的寫不出來,寫得出來的大概也不會想去
結論:
面top tier的話,刷Medium為主,Hard常出的要會
每一題都要很明確的知道自己在幹嘛,相關的follow up問題可能有哪些
一個題目你做不出來,一定有其它的面試者做的出來,GG
面扮家家酒的話,Easy刷一刷就好了,Medium做不出來你可能還是贏90%的對手
剩下就還是看你實際的工作經驗囉