刷了 1000 多道算法題,一點(diǎn)心得

程序員為啥要刷算法耳幢?

因?yàn)?“卷啊”岸晦!

開(kāi)個(gè)玩笑,其實(shí)睛藻,算法題目已經(jīng)成為了公司篩人的一種方式启上,大廠的每一輪面試基本都會(huì)有幾道算法題,甚至有的公司筆試全部都是算法題店印。其他題目答的都差不多冈在,那你算法題做不出來(lái),可能就被淘汰了按摘。

所以為啥要刷算法題呢包券?一方面是幫助你學(xué)習(xí)和理解算法,但另一方面也是像背公式炫贤、背八股文一樣溅固,增加你面試時(shí)碰到原題的概率。我刷了 1000 多道題嘛兰珍,不夸張的說(shuō)侍郭,在面試的時(shí)候 80% 的算法題都是原題。

當(dāng)然掠河,每個(gè)人學(xué)算法亮元、刷題的目標(biāo)是不同的,首先 要明確你的目標(biāo)唠摹,因?yàn)槟繕?biāo)不同苹粟,刷算法的平臺(tái)和方法也不同。

常見(jiàn)的目標(biāo)有以下四種:

  • 學(xué)習(xí)基本編程語(yǔ)法和思想

  • 想找大廠工作跃闹,應(yīng)對(duì)面試

  • 算法競(jìng)賽

  • 鍛煉自己的思維

大部分同學(xué)的目標(biāo)應(yīng)該都是第二個(gè)。現(xiàn)在的程序員面試中毛好,算法題目基本是必問(wèn)的望艺,所以,為了找到一份不錯(cuò)的工作肌访,越來(lái)越多的同學(xué)意識(shí)到了刷算法的重要性找默,甚至有一些同學(xué)剛開(kāi)始學(xué)編程,編程語(yǔ)言用的還不熟悉吼驶,就想著要提前刷算法準(zhǔn)備起來(lái)了惩激。

先聊聊編程新手應(yīng)該怎么刷題吧店煞?

編程新手刷題

對(duì)于大一同學(xué),大部分都是剛開(kāi)始接觸編程风钻,所以刷題的目標(biāo)應(yīng)該更傾向于第一種顷蟀,即幫助自己學(xué)習(xí)編程。

LeetCode 確實(shí)是如今最火爆的算法刷題平臺(tái)骡技,但有一個(gè)很大的誤區(qū)就是一上來(lái)就刷 LeetCode鸣个,對(duì)于編程小白來(lái)說(shuō),基礎(chǔ)的編程語(yǔ)法布朦、函數(shù)囤萤、面向?qū)ο蠖歼€不會(huì)呢,刷什么 LeetCode是趴?學(xué)什么數(shù)據(jù)結(jié)構(gòu)和算法L紊帷?

如果基本的編程語(yǔ)法還不熟悉唆途,我建議老老實(shí)實(shí)地做一些 基礎(chǔ)練習(xí)題富雅,應(yīng)該大部分學(xué)校的老師都會(huì)布置課堂作業(yè)吧?

比如我大一的時(shí)候基本就是在刷老師留的 OJ(Online Judge 在線判題平臺(tái))作業(yè)題目窘哈,不同于清華北大等一系列名校的 OJ吹榴,我們當(dāng)時(shí)刷的題都比較簡(jiǎn)單,每道題目都是解決一個(gè)小問(wèn)題滚婉,比如用 C++ 的 new class 來(lái)造汽車图筹。目的是幫助同學(xué)們學(xué)習(xí) C 語(yǔ)言、C++让腹、Java 等基礎(chǔ)語(yǔ)法远剩,熟悉面向?qū)ο缶幊趟枷耄员容^容易上手骇窍。

可能有同學(xué)覺(jué)得作業(yè)比較難對(duì)吧瓜晤,其實(shí)學(xué)校布置的課堂作業(yè)大部分都很基礎(chǔ)很基礎(chǔ),如果這都覺(jué)得難腹纳,我認(rèn)為比起嘗試網(wǎng)上的專業(yè)算法刷題平臺(tái)痢掠,倒不如踏踏實(shí)實(shí)先把簡(jiǎn)單的作業(yè)題啃透和理解。

這里我推薦 PTA 程序設(shè)計(jì)類實(shí)驗(yàn)輔助教學(xué)平臺(tái)嘲恍,上面提供了不少適合新手入門(mén)的簡(jiǎn)單練習(xí)題足画,比如基礎(chǔ)編程題目集、浙大版《C語(yǔ)言程序設(shè)計(jì)(第3版)》題目集等佃牛。

image

如果你已經(jīng)能夠使用一門(mén)編程語(yǔ)言開(kāi)發(fā)簡(jiǎn)單的程序了淹辞,那就要 確定自己的下一個(gè)目標(biāo),為了通過(guò)面試刷算法俘侠?還是想挑戰(zhàn)自我象缀,參加競(jìng)賽呢蔬将?

下面我針對(duì)不同的目標(biāo),來(lái)分別推薦一些資源央星。

找工作刷題

現(xiàn)在大廠面試基本每一輪都會(huì)考幾道算法題目霞怀,因此,越來(lái)越多的小伙伴意識(shí)到刷題的重要性等曼。

其實(shí)里烦,不需要關(guān)心太多平臺(tái),找工作刷題禁谦,選擇 LeetCode 就夠了胁黑,國(guó)內(nèi)最全的算法刷題網(wǎng)站。

很多朋友剛開(kāi)始刷 LeetCode 可能都會(huì)懷疑自己的智商州泊,比如我丧蘸。

我是一名計(jì)算機(jī)專業(yè)的學(xué)生,并且大一時(shí)還做過(guò)一些 ACM 題目遥皂,水到過(guò)一些小的比賽獎(jiǎng)項(xiàng)力喷,但是初次接觸 Leetcode 時(shí)感覺(jué)仍然像是走進(jìn)了一個(gè)船新的世界,感覺(jué)上面的題目自己無(wú)從下手演训。

[圖片上傳失敗...(image-de1090-1620721658865)]

后來(lái)和別人交流才發(fā)現(xiàn)弟孟,原來(lái)我不是一個(gè)人,一頭霧水才是剛開(kāi)始刷 Leetcode 的正常情況样悟!

不過(guò)當(dāng)我找到了訣竅后拂募,漸漸發(fā)現(xiàn) Leetcode 也沒(méi)有那么恐怖亭罪。我是從大二開(kāi)始刷算法的法挨,每天堅(jiān)持留 2 個(gè)小時(shí),刷 2-3 道題目赖瞒,大概過(guò)了一年震糖,面試中的算法題目基本都可以迎刃而解录肯!也幫助我拿到了一些大廠的 offer,最后入職鵝廠吊说。

我總共刷了 1000 多道算法題目论咏,光在 Leetcode 上就有 600 多道(簡(jiǎn)單、中等各占一半)颁井,還刷了一些其他平臺(tái)或書(shū)籍上應(yīng)對(duì)面試的題目厅贪,比如《劍指 offer》、旁槁客、PAT 等糊余,也都不錯(cuò)秀又。

image

我刷的 Leetcode 題目

刷了這么多道題目后单寂,明顯感覺(jué)自己的思維能力有了很大的提升,感覺(jué) Leetcode 好像也沒(méi)那么難了吐辙。

回想最初被 Leetcode 搞到懷疑人生宣决,還是自己沒(méi)有找對(duì)方法吧~

所以下面簡(jiǎn)單地分享下自己刷 LeetCode 的小技巧,希望大家少走彎路昏苏。

1. 刷題順序

記住三個(gè)要點(diǎn):從【學(xué)習(xí)板塊 LeetBook】刷起尊沸,從【簡(jiǎn)單的】刷起,從【通過(guò)率高】的刷起贤惯!

LeetBook 是 LeetCode 精心整理的算法和數(shù)據(jù)結(jié)構(gòu)專項(xiàng)練習(xí)(以前叫探索洼专,爺青結(jié)),每個(gè)專項(xiàng)對(duì)應(yīng)一個(gè)重要的知識(shí)點(diǎn)孵构,并通過(guò)一系列相關(guān)的題目帶大家入門(mén)屁商,相對(duì)自己零散地選題目來(lái)說(shuō),更加簡(jiǎn)單實(shí)用颈墅,還附有講解蜡镶,是入門(mén)的不二之選。

像面試無(wú)非就那么幾個(gè)重點(diǎn):樹(shù)恤筛、動(dòng)態(tài)規(guī)劃官还、深度 / 廣度優(yōu)先搜索、鏈表毒坛、數(shù)組望伦、排序、棧粘驰、隊(duì)列屡谐、哈希、字符串等蝌数。你要先完成專項(xiàng)練習(xí)中一些簡(jiǎn)單的題目愕掏,理解其背后的算法和數(shù)據(jù)結(jié)構(gòu)。之后顶伞,再舉一反三饵撑,練習(xí)更多相關(guān)的題目,當(dāng)你能做到用同一個(gè)算法解決一類共性問(wèn)題唆貌,做到 多題一解 時(shí)滑潘,才算是真正理解了。

image

LeetBook 專項(xiàng)學(xué)習(xí)

刷完 Leetbook 專欄后锨咙,進(jìn)入題庫(kù)语卤,利用 LeetCode 自帶的題目篩選和排序功能,能夠幫助我們由簡(jiǎn)單到中等再到困難,漸進(jìn)式刷題粹舵。一般來(lái)說(shuō)钮孵,先刷通過(guò)率較高的題目,相對(duì)比較容易眼滤。

image

2. 利用題解

LeetCode 的每道題目都有很多小伙伴給出了題解巴席,講述如何解決這道題。

怎么才算利用題解呢诅需?

首先漾唉,讀題解包括兩個(gè)部分,讀思路 和 讀代碼堰塌,既要理解作者做題的思路和邏輯赵刑,也要細(xì)致入微地學(xué)習(xí)他人代碼中優(yōu)秀的寫(xiě)法。即使這道題目你做出來(lái)了蔫仙,擊敗 100% 了料睛,我也建議去看看別人的題解,學(xué)習(xí)更多他人解題的思路摇邦,幫助自己打開(kāi)腦洞恤煞,做到 一題多解。

除了 LeetCode 自帶的題解之外施籍,網(wǎng)上有很多其他大佬整理的算法題解居扒,各種編程語(yǔ)言的都有!

比如全網(wǎng)瘋傳的谷歌大佬算法刷題筆記:

image

還有 Go 語(yǔ)言的算法題解:

image

還有《數(shù)據(jù)結(jié)構(gòu) Java 語(yǔ)言描述》:

image

一千多道題的解題思路和方法丑慎。

image
image
image
image

而且所有的題目作者還給出了源代碼喜喂,讀者可以直接運(yùn)行。

image

如何閱讀本筆記:

先自己讀題竿裂,思考如何解題玉吁。如果15分鐘還沒(méi)有思路,那么先看筆者的解題思路腻异,但是不要看代碼。有思路以后自己用代碼實(shí)現(xiàn)一遍悔常。如果完全不會(huì)寫(xiě)影斑,那就看筆者提供的代碼,找出自己到底哪里不會(huì)寫(xiě)机打,找出問(wèn)題記下來(lái)矫户,這就是自己要彌補(bǔ)的知識(shí)漏洞。如果自己實(shí)現(xiàn)出來(lái)了残邀,提交以后有錯(cuò)誤皆辽,自己先 debug柑蛇。AC以后沒(méi)有到100%也先自己思考如何優(yōu)化。如果每道題自己都能優(yōu)化到100%了驱闷,那么一段時(shí)間以后進(jìn)步會(huì)很大唯蝶。所以總的來(lái)說(shuō),實(shí)在沒(méi)思路遗嗽,看解題思路;實(shí)在優(yōu)化不到100%,看看代碼鼓蜒。

以上資源都已經(jīng)整理好了痹换,需要的朋友 點(diǎn)擊此處 憑截圖免費(fèi)獲取即可;

話說(shuō)都弹,現(xiàn)在網(wǎng)上的題解實(shí)在是太多啦娇豫!在刷題時(shí),讀個(gè)一兩份就行了畅厢,別給自己太大壓力冯痢。

除了看題解外,很多同學(xué)沒(méi)有意識(shí)到框杜,多寫(xiě)題解 才是真正的法寶浦楣,把自己的解題思路整理成文,或者講給別人聽(tīng)咪辱。這樣做不僅能夠加深自己對(duì)題目的印象振劳,進(jìn)一步加深對(duì)算法的理解,幫助自己回顧解題過(guò)程油狂,從而在面試的時(shí)候更容易復(fù)述历恐;還能幫助到更多同學(xué)。

甚至有一些厲害的同學(xué)通過(guò)記錄和分享自己的題解专筷,還沒(méi)畢業(yè)弱贼,就已經(jīng)出版了自己的書(shū)籍,年入幾十萬(wàn)或者百萬(wàn)磷蛹!

image

3. 精益求精

當(dāng)你每次成功解題時(shí)吮旅,LeetCode 系統(tǒng)會(huì)生成一份解題報(bào)告,告訴你的程序在時(shí)間和空間上擊敗了多少用戶弦聂。

雖然答出題目就已經(jīng)很棒了鸟辅,但還不夠。面試的時(shí)候莺葫,一些面試官就喜歡給你出題目的變種匪凉,或者要求你用更優(yōu)的方式解出題目。所以捺檬,在保證完全理解題目解法的基礎(chǔ)上再层,請(qǐng)不斷優(yōu)化你的代碼,找到更多的思路和更優(yōu)解,直到擊敗 100% 的用戶吧聂受。

我們?cè)诠ぷ髦休锴兀m然未必會(huì)直接和算法打交道,但學(xué)習(xí)算法對(duì)工作的幫助真的很大蛋济!

解算法題時(shí)棍鳖,我們要對(duì)多種算法分析復(fù)雜度,從中選擇最優(yōu)解碗旅。而在工作中渡处,也是如此,一個(gè)需求有很多種實(shí)現(xiàn)方式祟辟,經(jīng)常也要設(shè)計(jì)幾種不同的方案医瘫,分析他們的成本、性能等差異旧困,選擇其中最好的一種進(jìn)行實(shí)施醇份。

所以,請(qǐng)認(rèn)真對(duì)待每一道算法題目吼具,把它當(dāng)成一個(gè)工程問(wèn)題來(lái)解決僚纷,相信你的思維會(huì)逐漸打開(kāi),并逐漸掌握編寫(xiě)高性能程序的技巧拗盒。

4. 參與競(jìng)賽

我建議大家多參加算法競(jìng)賽畔濒,這里的競(jìng)賽不是指 ACM 區(qū)域賽那種大神級(jí)別的,別忘了此時(shí)我們的目標(biāo)只是找工作锣咒。

其實(shí)侵状,LeetCode、乓阏客等網(wǎng)站每周都會(huì)開(kāi)展一次線上算法競(jìng)賽趣兄,看看誰(shuí)能在有限時(shí)間內(nèi)最快最多地解題。

image

在競(jìng)賽的過(guò)程中悼嫉,緊張刺激的環(huán)境會(huì)使我們的精神保持高度集中艇潭,能夠激發(fā)出我們的思維,從而在有限的時(shí)間內(nèi)進(jìn)行更多的思考戏蔑,也能幫助我們適應(yīng)面試的節(jié)奏蹋凝。多多參加還有機(jī)會(huì)獲得他們官方提供的獎(jiǎng)勵(lì)!雖然我這小菜雞一次也沒(méi)拿到 555总棵。

此外鳍寂,參加藍(lán)橋杯競(jìng)賽也是不錯(cuò)的,我自己也參加了兩屆情龄,題目的難度和找工作要求的算法題目難度相當(dāng)迄汛,也能發(fā)現(xiàn)自身的不足捍壤、激勵(lì)自己進(jìn)步吧。

5. 考取證書(shū)

這幾年鞍爱,PAT 計(jì)算機(jī)程序設(shè)計(jì)能力考試在逐漸升溫鹃觉,分為頂級(jí)、甲級(jí)睹逃、乙級(jí)三個(gè)級(jí)別盗扇。

image

我親身參與過(guò)甲級(jí)和乙級(jí)的考試,難度適中沉填,雖然目前這個(gè)證書(shū)的含金量不高粱玲,但在備戰(zhàn)考證的過(guò)程中,你有一個(gè)學(xué)習(xí)的目標(biāo)拜轨,會(huì)更有動(dòng)力堅(jiān)持下去。在我看來(lái)允青,過(guò)程大于結(jié)果橄碾。

6. 看文章

其實(shí)很多零碎的時(shí)間,大家也可以利用起來(lái)颠锉,看一些推送法牲、文章之類的,比如我大二暑假坐高鐵實(shí)習(xí)的路上就是看小灰的漫畫(huà)來(lái)學(xué)算法琼掠,5 - 10 分鐘一篇拒垃,這個(gè)時(shí)間不保證你能學(xué)會(huì),但看了之后最少能讓你對(duì)算法有個(gè)基礎(chǔ)的印象瓷蛙。時(shí)間就像我腦袋里的水悼瓮,擠一擠還是有的,想超過(guò)那些比你有天賦的人艰猬,就一定要利用好時(shí)間横堡。


至于什么時(shí)候可以停止刷題了呢?這也要看你刷題的目的冠桃,是找工作還是持續(xù)鍛煉思維提升自己命贴?

我身邊一些同事還保留著刷算法的習(xí)慣,但我找到工作后食听,對(duì)算法的態(tài)度就像是仇人了胸蛛,不想見(jiàn),能不見(jiàn)就不見(jiàn)樱报。

無(wú)論如何葬项,刷題一定要拉長(zhǎng)戰(zhàn)線、養(yǎng)成習(xí)慣迹蛤,每天最好固定一個(gè)時(shí)間玷室,堅(jiān)持做幾道題目零蓉,比如我當(dāng)時(shí)是每天早上還在床上躺著時(shí),掏出手機(jī)看一道題目穷缤,然后閉著眼睛思考一會(huì)敌蜂,想到解法后再起床敲。

千萬(wàn)不要急于求成津肛、爆發(fā)式刷題章喉!而且除非你對(duì)算法很有自信,否則我建議找到工作前不要停止刷題身坐。

最后秸脱,萬(wàn)事開(kāi)頭難,希望大家不要懷疑自己的能力部蛇,更不要懷疑自己的智商摊唇。算法和編程語(yǔ)言學(xué)習(xí)一樣,找對(duì)方法涯鲁,付出努力巷查,一定會(huì)有進(jìn)步的!

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抹腿,一起剝皮案震驚了整個(gè)濱河市岛请,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌警绩,老刑警劉巖崇败,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肩祥,居然都是意外死亡后室,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)混狠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咧擂,“玉大人,你說(shuō)我怎么就攤上這事檀蹋∷缮辏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵俯逾,是天一觀的道長(zhǎng)贸桶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)桌肴,這世上最難降的妖魔是什么皇筛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮坠七,結(jié)果婚禮上水醋,老公的妹妹穿的比我還像新娘旗笔。我一直安慰自己,他們只是感情好拄踪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布蝇恶。 她就那樣靜靜地躺著,像睡著了一般惶桐。 火紅的嫁衣襯著肌膚如雪撮弧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天姚糊,我揣著相機(jī)與錄音贿衍,去河邊找鬼。 笑死救恨,一個(gè)胖子當(dāng)著我的面吹牛贸辈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肠槽,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼擎淤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了署浩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扫尺,失蹤者是張志新(化名)和其女友劉穎筋栋,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體正驻,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弊攘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姑曙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片襟交。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖伤靠,靈堂內(nèi)的尸體忽然破棺而出捣域,到底是詐尸還是另有隱情,我是刑警寧澤宴合,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布焕梅,位于F島的核電站,受9級(jí)特大地震影響卦洽,放射性物質(zhì)發(fā)生泄漏贞言。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一阀蒂、第九天 我趴在偏房一處隱蔽的房頂上張望该窗。 院中可真熱鬧弟蚀,春花似錦、人聲如沸酗失。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)级零。三九已至断医,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奏纪,已是汗流浹背鉴嗤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留序调,地道東北人醉锅。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像发绢,于是被迫代替她去往敵國(guó)和親硬耍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容