leetcode 刷500道題,筆試/面試穩嗎?別以為你自己穩了

2021-03-02 程式設計師喬戈裡

來源公眾號:苦逼的碼農

作者:帥地

想要學習算法、應付筆試或者應付面試手撕算法題,相信大部分人都會去刷 Leetcode,有讀者問?如果我在 leetcode 堅持刷它個 500 道題,以後筆試/面試穩嗎?

這裡我說下我的個人看法,我認為不穩。下面說說為啥不穩以及算法題應該如何刷、如何學才比較好,當然,也會推薦自己學過的資料。

一、先說說筆試題

在刷 leetcode 的時候,你會發現,每道題的題意都很短,你只需要花十幾秒的時間,就知道這道題是要你幹嘛了,並且每道題所用道的算法思想都很明確,動態規劃、遞歸、二分查找等,你可能很快就知道該用哪種方法,只是你不懂如何把代碼寫出來而已。

而在筆試中是完全不一樣的,在筆試中,大部分題目都是情景題,可能讀懂個題目都需要花不少時間,偶爾還會遇到不大知道題目要我們幹嘛,而且有時間限制,估計每道題給你分配的時間是 30 分鐘。這裡我隨便扔一道題給大家看看(Shopee去年的真題)

並且你可能不容易看出來,這些道題該用什麼方法好,有可能是多種方法的結合(當然,不是指這道題哈)。

也就是說,在 leetcode 中,hard 級別的題做的出來,而在筆試中 medium 級別的,由於時間、心態等因素的影響。你可能還做不出來,當然,大佬除外。下面說一說題型的一些題型以及如何學習算法會好應付點。

在筆試中,我認為主要有如下幾種題型:

1、基本數據結構的考察:這類題我覺得是比較簡單的,主要考場基本數據結構的操作,例如二叉樹的層序遍歷,鍊表的逆序等,當然,它不會直接告訴你,讓你來逆序或者遍歷。例如

2、某種算法思想的掌握:這類題你掌握了某種算法思想,就會比較容易,如果不懂,那就涼涼了。例如動態規劃、回溯、枚舉、深度/廣度、貪心、二分等。其中,我覺得動態規劃考的挺多,還要就是 回溯+深度/廣度。例如

所以,常見算法思想,一定要掌握。

3、邊界條件的考察:這類型的題,估計你一看就有思路,知道該怎麼做,但是,它的邊界條件特別多,需要分很多種情況來討論,特別容易出錯,有時候會讓人陷進去,越做越複雜,這類題主要考場你的思維嚴謹程度。例如

4、找規律、數學公式:這類型的題,主要是根據數據之間的一些關係,來找一些規律,進而推出他們的通用公式,就像我們高中時,找數列的同項一樣。例如

二、應該如何刷題?如何學習?

上面說了筆試題的一些情況,也說了主要考察的一些題型。針對這些題型,我覺得在刷題的時候,你要做好下面幾件事。

1、分類歸納/總結

歸納?總結?估計大部分都知道歸納、總結這麼一回事,但是,有沒有去實踐我就不知道了。

(1)、數組和相關題型

對於算法題,還是有很多種題型需要去總結的,如果你懂這個題型,以後遇到類似的題,相信很快就能做出來的。有哪些題型可以總結呢?答是非常多:例如

(1)、給你一個非負數的數組,求最大子數組和的長度

這算是一個題型,關於這個題型,有很多種變形、拓展,這裡建議一起歸納總結,例如

(2)、剛才給的數組是非負數的,現在變一下,給的數組是可正可負。

還能繼續拓展嗎?答是可以的,例如

(3)、給你個矩陣(即二維數組),求最大子矩陣和的面積

還有嗎?有,例如剛才是求最大和,現在我改成求最大乘積。

我舉上面這些例子,就是想告訴你,對於前期的學習,我建議分類刷題,總結題型,像我上面舉的這些例子,在筆試/面試中還是比較常見的,如果你懂得對應的方法,就可以秒殺了,因為這類題,沒啥邊界或者規律。例如我剛才距離的Shopee的零食櫃那道題,實際上就是數組切割題型,相當於給你一個數組,讓你切割 n 下,那麼可以把數組切割成 n + 1 個子數組,怎麼樣切割,才能讓最大子數組的和最小?

關於題型的,還是很多的,我這裡無法一一給你列舉,只能靠你刷題的過程中,進行分類、總結。不過我可以給你推薦一些資料,後面推薦哈。下面我在說一些題型吧。

(2)、基本數據結構操作相關題型

剛才我說了,筆試題的考察,有一類題是基本數據結構的考場,而且,這類題在面試中,也是高頻考點,在筆試中,倒不是很高頻。對於這類題,我覺得你願意去總結,那麼以後遇到,問題不大。例如

鍊表的各種操作:逆序(部分逆序、按某種條件逆序)、判斷是否有環,環的入口節點、刪除指定節點等。

二叉樹的各種操作:各種非遞歸的遍歷操作(前中後、層)、二叉樹的公共祖先、根據前中後的遍歷結果來重構二叉樹等等。

隊列、棧相關操作:最小棧、來隊列來實現棧等。

(3)、字符串相關問題

不得不說,字符串相關問題,估計考的最高頻,而且,我可以告訴你,對於字符串相關問題,90% 可以用動態規劃來解決。反正對於字符串問題,我一般想法就是能否套用動態規劃,字符串問題有點多,不過你有時間,建議總結。例如:通配符的匹配、最長公共子串、最小編輯代價、最長回文串等等。大部分都是用動態規劃,而且,我覺得解法都差不多,所以強烈建議專門花一段時間來做、總結、歸納。後面我也會寫這方面的算法文章,敬請期待。

2、多思考/動手,提高自己的思維完整性/靈敏性

(1)、邊界、找規律題型

剛才我說有一類題型是邊界特別多的,對於這類題,我覺得不好總結,這類題考察你邏輯是否嚴謹,能否化繁為簡。這裡我建議多做幾道,做的時候,多自己思考,千萬不要覺得自己知道思路,自己怎麼寫,只是情況太多,懶的寫,直接看別人的答案,這樣子,這道題你做了價值不大,因為這類題就是考察你思維完整性的,最好是自己做,可能你用了 十幾個 if 語句,沒關係。接著你可以把你的 if  語句進行化簡,查找他們的共同點。最後你可以看大佬們的做法,你的收穫會更大!

對了,也千萬別急著動手寫,應該想一想可行性,不然你容易陷入無底深淵。

對於找規律的題型也是一樣,這類題最後別急著看答案,應該多思考,多做幾道,做多了,你的思維會越來越靈敏,以後看到這類型的題,可以很快有思路。

所以,對於這種邊界、規律題,個人感覺總結的價值不是特別大,更多的是多思考,多動手。

注意:每道題,我們都要追求最優解哈,別覺得 ac 了就完事了。

三、我看過的一些資料

上面說了那麼多,可能有人是道理我都懂,可我還是學不會,說實話,學習的方法有很多,每個人的學習方法也都不一樣,我這裡也只是提供一種參考。但是,無論什麼方法,你不去動手執行,那麼,一切都是空話

這裡我推薦一些我看過的書,感覺挺不錯。

1、書籍推薦

剛才我說了很多種題型,對於按題型刷題總結,首推《程式設計師代碼面試指南:IT名企算法與數據結構題目最優解》,這本書真的挺不錯,大部分題型都總結了,而且每個專題有十幾二十道,這裡建議大家買本來學習。

還要一本我大一看的,感覺也挺不錯,叫做《挑戰程序設計大賽》,不過這本比較適合不急著面試的吧,這本不像上面那一本,專門來總結各種題型應付面試。

《編程之美》、《編程珠璣》也建議看,這兩本我覺得比較有趣,不是說讓你一直刷題一直刷題,這兩本你可以買來看看,會給你帶來一些思路,這兩本我是只看,沒動手打代碼。

Leetcode 刷題的時候,也是可以分題型刷滴,所以也可以去 leetcode 刷題,不過刷題的時候,我這裡有個建議,就是別在本地 IDE 寫代碼,直接在網頁端寫就行了。因為面試的時候,一般就讓你在記事本寫代碼,不會給你 IDE。如果你不習慣,估計很容易寫錯代碼,而且,有些庫函數你也把名字忘記了。網頁端其實也是挺方便的,也會有一些代碼提示。

對於,對於連各種算法思想、數據結構都還不懂的同學,上面的數據不大合適哈,推薦我看過的兩本書《數據結構與算法分析 — C 語言描述版》、《算法設計與分析基礎》(這本代碼實現是用偽代碼的)。

2、視頻推薦

說時候,我視頻看的不多,對於算法的學習,特別是刷題,我是不大習慣看視頻,如果你想看視頻,我覺得牛客網的算法視頻還不錯吧,我沒過幾集,分初級班和進階班。其他的我也沒看過,所以這裡可以推薦的不多。

四、總結

回到標題,leetcode 刷 500 道題穩嗎?說實話,你能堅持刷 500 道題,說明你的能力還是挺強的,但是對於筆試,我覺得不一定穩,得看你怎麼做,例如是否追求最優解,是否進行總結歸納,還是說你只是暴力 ac 了之後就不理了,或者不敢跳出舒適區,老是做那些比本來就比較擅長的題目,而遇到自己弱的題目,馬上就看答案了。而且我說了,有些題是找規律或者邊界很多的,這類題需要你多思考、動手,不是說我多刷幾道就可以了。

總之,對於刷題,千萬別追求數量!

點個「在看」再走吧,謝謝👇

相關焦點

  • leetcode 刷500道題,筆試/面試穩嗎?
    如果我在 leetcode 堅持刷它個 500 道題,以後筆試/面試穩嗎?這裡我說下我的個人看法,我認為不穩。下面說說為啥不穩以及算法題應該如何刷、如何學才比較好,當然,也會推薦自己學過的資料。一、先說說筆試題在刷 leetcode 的時候,你會發現,每道題的題意都很短,你只需要花十幾秒的時間,就知道這道題是要你幹嘛了,並且每道題所用道的算法思想都很明確,動態規劃、遞歸、二分查找等,你可能很快就知道該用哪種方法,只是你不懂如何把代碼寫出來而已。
  • 網際網路技術筆試總通不過?leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 leetcode之世界觀 什麼是leetcode 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • 帶你狂刷算法Leetcode題!短時間內快速獲得實戰能力!
    但對於初學者來說,很容易沉迷在刷題的數量中,覺得如果能刷完這1000道題,自己一定能夠有所飛躍。但實際上,低效率的重複對你來說,根本就無法掌握到解題的精髓,一旦題目有所變動,就無法舉一反三。那究竟應該怎麼刷題才高效呢?
  • 你面試穩了!通關LeetCode刷題完整攻略,省時又高效
    別小看就兩個區間,他們之間的關係能跑出來6種情況。詳細的就看圖啦。理解和識別這六種情況,灰常重要。因為這能幫你解決一大堆問題。更新一下國外LeetCode大神們是怎麼刷LeetCode的:窮碼農:LeetCode到底應該怎麼刷?面試應該注意哪些問題?大公司到底怎麼進?來看看LC大神們的刷題攻略!
  • leetcode 第45題:跳躍遊戲2
    學好算法沒有捷徑,最好的捷徑就是多刷題,並且跳出舒適區,每道題都要尋找最優解,也不能老是做那些你自己比較擅長的題,不定期更新 Leetcode 的題,每道題都會給出多種解法以及最優解。題目描述給定一個非負整數數組,你最初位於數組的第一個位置。數組中的每個元素代表你在該位置可以跳躍的最大長度。
  • 春節大禮包|刷題技巧+80道Leetcode
    為了跳槽,我前兩年的春節都是在刷題中度過的,目前為止刷了小四百道leetcode,也算是有一些經驗,今天就跟大家分享下學習方法和我總結的乾貨。後來發現了 Leetbook[1] 這個寶藏,才算是找到了適合自己的刷題方法。
  • leetcode刷題最強指南(版本1.0)
    為什麼會有這篇刷題指南很多剛開始刷題的同學都有一個困惑:面對leetcode上近兩千道題目,從何刷起
  • leetcode真的有1000道?別亂刷!掌握科學方法,省時高效不脫髮!
    點擊上方藍字MintyMentors關注我們遇見你專屬的行業導師 開啟求職新鮮旅程實習,全職,全球職位招聘盡在明途求職學CS在北美找工作,最重要的是什麼?很多人脫口而出,是刷題!毫無疑問,刷題是找工作的必經之路。但不懂方法的盲目刷題,僅僅只是一種「感動自己」但是卻毫無用處的安慰劑而已。
  • LeetCode按照怎樣的順序來刷題比較好?
    分享一下身邊大神的刷題順序:如果你時間比較緊迫,為了找工作而刷題,我建議你先刷熱門推薦,一共兩百多道題。先刷熱題 HOT 100,再刷精選 TOP 面試題,之後刷其他的題。如果你時間比較充裕,那我建議你:按從低到高的難度分組刷按 tag 分類刷定期複習,重做之前刷過的題掌握 LeetCode 刷題方法再開始刷題,屬於磨刀不誤砍柴工。
  • 刷LeetCode 對於國內 IT 企業面試幫助大嗎?
    今年大三,大四要找工作了,沒搞過ACM(其實挺後悔的),校招面試都考算法的,我這種沒搞過ACM的感覺挺沒競爭力的,同學有推薦leetcode的,不知對於國內的IT企業面試幫助大嗎?對於 BAT 等一線大廠來說,算法面試是必須跨過去的一道坎,所以必須得準備好算法面試~但很多時候,你即使提前複習了這些最常見的面試算法題,你依舊無法通過算法面試!為什麼?你在提前準備複習的時候,在網上找了半天響應題目的分析文章,但你看了就是不懂。你在面試的時候,卡殼了,一時間忘了怎麼寫代碼了我來助你一臂之力!!
  • C#刷遍Leetcode面試題系列連載(1) - 入門與工具簡介
    刷LeetCode有哪些好處?比如你上學時用 C++ 刷一遍,工作後再用 C# 刷一遍,最後再用 Python 刷一遍,那麼你對各個語言的代碼量和性能都會有更深地體會,也會知道用哪一種語言具體該怎麼寫出更簡短、更優雅的代碼。LeetCode vs 傳統的 OJ中學有NOI信息競賽,大學有ACM算法競賽,按理說應該都有各自的 OJ,這兩類 OJ 不是業內公司的真實面試題。
  • 一個月帶你狂刷算法Leetcode題,衝刺最後秋招!
    《百面機器學習》這本書出版自2018年,是一本很新的書籍,書中收錄了超過100道機器學習算法工程師的面試題目和解答,其中大部分源於算法研究崗位的真實場景,非常實用本書按照面試的邏輯,從日常工作、生活中各種有趣的現象出發,結合了知識點和工具與業務場景的應用不僅囊括了機器學習的基本知識 ,而且還包含了成為出眾算法工程師的四大技能
  • 刷了幾千道算法題,我私藏的刷題網站都在這裡了
    刷題,是這個世界上最有意思的事兒!當然刷題不能亂爽,你要知道刷題要幹嘛,是找工作面試、研究生複試機試,是參加程序設計競賽還是為了提高自己,在這裡我將這些分為三類:收割 offer 版、ACM 競賽版和提高版。
  • 2021省考3月筆試!今年上岸穩了!
    同時,我們聯合在線教育品牌【作業幫】,開啟為期4天的《2021省考提分上岸計劃》,4天抵過你幾個月無方法自學、刷題!不管你是想了解報崗指導,筆試申論/行測難點突破,還是面試技巧,本次上岸計劃統統!精選6-8年名師,申論閱卷人站在命題角度帶你「抄」出75+、行測高分大神公式秒殺五大類型考題!結構化面試技巧,考生一戰上岸!
  • D28| 2021年教師資格證筆試刷題,第28天!
    2021下教師資格證筆試押題資料包,你千萬別錯過!1.1776年在德國柯尼斯堡大學開始教授教育學的學者是(  )。A.赫爾巴特B.誇美紐斯C.康德D.裴斯泰洛齊C[解析]1776年康德在柯尼斯堡大學開始講授教育學。2.據記載,我國的小學產生於(  )。
  • Anki實戰-刷leetcode之「141-環形鍊表」
    有同學說自己刷leetcode的時候每次刷完就忘,忘了再刷。
  • Leetcode刷題五遍還沒offer!舉例分析為什麼找工作光刷題不夠
    一畝三分地就業求職版裡,有位同學發帖說:LZ從14年秋季入學開始刷題,一門心思要找份好工作,到現在leetcode已經刷過五遍,都做好詳盡的總結,看過geeksforgeeks裡面一半的topic。。。今年形勢不行,上學期只拿到了微軟,google, tableau和bloomberg的面試。
  • 字節大佬Leetcode刷題筆記,看完吊打問你算法的面試官
    介紹leetcode 題解,記錄自己的 leetcode 解題之路。目前分為五個部分:第一個部分是 leetcode 經典題目的解析,包括思路,關鍵點和具體的代碼實現。第四部分是每日一題,每日一題是在交流群(包括微信和 qq)裡進行的一種活動,大家一起 解一道題,這樣討論問題更加集中,會得到更多的反饋。而且 這些題目可以被記錄下來,日後會進行篩選添加到倉庫的題解模塊。
  • 刷題500道就一定能拿到offer嗎 ?
    但是,僅僅刷題足夠多就萬事俱備了嗎?那些lintcode刷了幾百題的都一定能成功上岸嗎?            想像一下,如果你是一個面試官,現在需要從兩個面試者中選擇一位更適合公司的員工。要知道,面試官要找的是以後每天能夠愉快工作的夥伴,而不是做題的機器。刷題固然重要,但其他方面也不可忽視,刷了巨多題還拿不到offer的很有可能是下面的原因。
  • 程式設計師跳槽面試刷題必備,微軟工程師放大招!| 程式設計師硬核評測
    跳槽後薪水翻倍自然爽歪歪,但最怕的是面試翻車,那就悲劇了。可想而知,想要跳槽或者為春招準備的畢業生們,正在為刷算法題焦頭爛額。別怕,CSDN 又來助你一臂之力了,當然不是只給你說雞湯打氣加油的。這一次,還是給你實用、可執行、能快速上手(臨時抱佛腳)的工具。