0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

新手如何有效的刷算法題(LeetCode)

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:五分鐘學(xué)算法 ? 2020-06-03 17:51 ? 次閱讀

前言

作為一名非科班出身的程序員,我是參加工作之后才開(kāi)始接觸算法,學(xué)算法至今有將近五年的時(shí)間,期間輸出文字約 100 多萬(wàn),從算法小白到寫(xiě)出百萬(wàn)閱讀的算法文章,這一路歷程,有心酸也有掌聲。

過(guò)往歷歷在目,沒(méi)有誰(shuí)比我更了解算法小白的焦慮與迷茫。

每每在公眾號(hào)后臺(tái)看到讀者留言求教時(shí),我都在想:我能為他們做點(diǎn)什么。

我決定把我曾經(jīng)踩過(guò)的坑以及總結(jié)出來(lái)的經(jīng)驗(yàn)毫無(wú)保留的分享給你,希望能為你撥開(kāi)迷霧。

這些經(jīng)驗(yàn)并不會(huì)適合每個(gè)人,但或許也能對(duì)你有所啟發(fā)。

今天這篇文章聊的話題就是新手如何有效的刷算法題(LeetCode)。

如果你想要開(kāi)始刷題,那么第一步就是:打開(kāi) LeetCode 官網(wǎng),點(diǎn)擊標(biāo)簽,選擇一道順眼的題目開(kāi)始刷。

注意,在這過(guò)程中,不要左思右盼,不要去搜索與思考到底是刷 LeetCode 好還是去??途W(wǎng)刷劍指 Offer 好。

我作為一名算法小白的時(shí)候,就犯了這個(gè)錯(cuò)誤:在粗略的了解基本的數(shù)據(jù)結(jié)構(gòu)與算法后,準(zhǔn)備開(kāi)始刷題,總想著找一個(gè)最有效最好的刷題平臺(tái)。

一會(huì)在 LeetCode 題解區(qū)逛逛,一會(huì)在??途W(wǎng)看看面經(jīng),結(jié)果就是整個(gè)人煩躁不安,焦慮迷茫,題沒(méi)有刷幾道,羨慕嫉妒恨卻增加了幾分:別人的代碼怎么這么簡(jiǎn)潔 ?別人的 Offer 怎么這么亮眼?

經(jīng)過(guò)痛定思定之后,我開(kāi)始自我剖析自己想好好刷題卻無(wú)效的原因:

1、沒(méi)有接受自己是算法小白的事實(shí)

我那時(shí)候只是按圖索驥般的稍微系統(tǒng)的接觸了基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)與算法知識(shí),根本沒(méi)有真正的利用這些知識(shí)去處理問(wèn)題。

在刷題的過(guò)程中,總想證明自己可以的,別人可以寫(xiě)成簡(jiǎn)潔高效的解題方法,我也要!于是去不停的找題證明自己,結(jié)果就是越刷越?jīng)]有效果,自己根本就看不懂題目考察的數(shù)據(jù)結(jié)構(gòu)與思想。

整個(gè)人完全奔潰,不刷題了,不準(zhǔn)備算法面試了,不準(zhǔn)備跳槽了!

后來(lái)我不停的告誡自己:作為一名非科班的程序員,肯定比不上他們呀,如果隨隨便便的學(xué)了一點(diǎn)就能刷題順利,那別人大學(xué)四年不白學(xué)了!

所以前期先接受自己的思考方式,暴力解法其實(shí)也是一種有效的解法。

2、沒(méi)有合理的刷題

我只是盲目的追求刷題的數(shù)量,即使刷了 200 道,腦中依舊一團(tuán)漿糊。

后來(lái)才明白,吃透一道題目比亂刷十道題目更有價(jià)值。

經(jīng)過(guò)不斷的摸索與試驗(yàn),形成了自己的一套刷題路徑。

自己的解法

網(wǎng)上好的解法

自己的解法可以優(yōu)化的地方

不停的優(yōu)化

尋找相同的題型

總結(jié)

每一個(gè)題目都經(jīng)過(guò)至少一遍這樣的迭代,徹底吃透一道題進(jìn)而掌握一種題型。

以一道極其簡(jiǎn)單的動(dòng)態(tài)規(guī)劃題為例 ,LeetCode 第 70 號(hào)問(wèn)題:爬樓梯。

當(dāng)時(shí)的我根本不知道動(dòng)態(tài)規(guī)劃的相關(guān)概念,什么狀態(tài),什么轉(zhuǎn)移方程,通通沒(méi)聽(tīng)過(guò)。

沒(méi)錯(cuò),當(dāng)時(shí)就那么菜!

二話不說(shuō),直接使用暴力解法。

classSolution{ publicintclimbStairs(intn){ returncalcWays(n); } privateintcalcWays(intn){ if(n==1)return1; if(n==2)return2; returncalcWays(n-1)+calcWays(n-2); } }

很明顯,無(wú)腦的遞歸暴力解法包含了大量的重復(fù)計(jì)算,提交上去直接標(biāo)紅提示超出時(shí)間限制。

后來(lái)看了網(wǎng)上高票答案的分析,知道了備忘錄的概念,于是很容易寫(xiě)出優(yōu)化后的代碼。

//采用備忘錄的方式來(lái)存子問(wèn)題的解以避免大量的重復(fù)計(jì)算 classSolution{ int[]memo; publicintclimbStairs(intn){ memo=newint[n+1]; returncalcWays(n); } privateintcalcWays(intn){ if(n==1)return1; if(n==2)return2; if(memo[n]==0) memo[n]=calcWays(n-1)+calcWays(n-2); returnmemo[n]; } }

再后來(lái),發(fā)現(xiàn)備忘錄是自頂 向下的方式,稍許變動(dòng),修改為自低 向上的遞推方式就是動(dòng)態(tài)規(guī)劃的形式。

classSolution{ publicintclimbStairs(intn){ int[]memo=newint[n+1]; memo[0]=1; memo[1]=1; for(inti=2;i<=?n;?i++){? ????????????memo[i]?=?memo[i-1]?+?memo[i-2];? ????????}? ????????return?memo[n];? ????}? }

按照這樣的刷題路徑下來(lái),發(fā)現(xiàn)對(duì)這類題型有了初步的思考途徑,有了發(fā)力點(diǎn),再也不會(huì)一籌莫展:看題懵逼半小時(shí),Coding 只會(huì)按空格。

徹底搞懂這題后,就需要找到類似的題型,然后不斷的重復(fù)練習(xí):最小路徑和、整數(shù)拆分、完全平方數(shù)、解碼方法、不同路徑、不同路徑 II。

通過(guò)這些練習(xí),尋找題目中的共同點(diǎn),為什么這類題型都可以這樣思考呢?

慢慢的,知道了最優(yōu)子結(jié)構(gòu)、狀態(tài)轉(zhuǎn)移方程、重疊子問(wèn)題的概念,不知不覺(jué)動(dòng)態(tài)規(guī)劃的知識(shí)點(diǎn)已經(jīng)掌握了 80%。

再遇到更高難度的動(dòng)態(tài)規(guī)劃的題目時(shí),心里也明白,一時(shí)半會(huì)沒(méi)做成無(wú)法就是最優(yōu)子結(jié)構(gòu)、狀態(tài)轉(zhuǎn)移方程、重疊子問(wèn)題沒(méi)有理清楚。

這樣長(zhǎng)期堅(jiān)持下來(lái),接觸新的題型時(shí)也可以從容不迫的思考。

后記

如果說(shuō)成為大神有什么訣竅的話,那就是相信時(shí)間的力量,每天進(jìn)步一點(diǎn)就夠了!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4552

    瀏覽量

    92027
  • leetcode
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    2307

原文標(biāo)題:新手如何有效的刷算法題(LeetCode)

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    發(fā)電機(jī)是無(wú)好還是有

    發(fā)電機(jī)選擇無(wú)還是有,主要取決于具體的應(yīng)用場(chǎng)景和需求。以下是對(duì)兩種發(fā)電機(jī)類型的比較: 一、有發(fā)電機(jī)的特點(diǎn) 價(jià)格與成本 :有發(fā)電機(jī)通常價(jià)格較為實(shí)惠,后期維護(hù)和修理相對(duì)簡(jiǎn)單,成本也較
    的頭像 發(fā)表于 09-03 10:51 ?187次閱讀

    BLDC電機(jī)控制算法詳解

    無(wú)直流電機(jī)(Brushless DC Motor,簡(jiǎn)稱BLDC電機(jī))以其高效率、高可靠性和低噪音等特點(diǎn),在工業(yè)、家電和汽車(chē)等領(lǐng)域得到了廣泛應(yīng)用。為了實(shí)現(xiàn)BLDC電機(jī)的精確控制,需要采用適當(dāng)?shù)目刂?/div>
    的頭像 發(fā)表于 06-14 10:49 ?536次閱讀

    空心杯電機(jī)是有還是無(wú)

    空心杯電機(jī)是一種特殊類型的電機(jī),它具有體積小、重量輕、效率高、響應(yīng)速度快等特點(diǎn)。在選擇空心杯電機(jī)時(shí),有和無(wú)是兩種常見(jiàn)的類型。本文將從多個(gè)方面對(duì)有和無(wú)空心杯電機(jī)進(jìn)行詳細(xì)的比較和分
    的頭像 發(fā)表于 06-12 15:00 ?1216次閱讀

    基于CW32的無(wú)直流空心杯電機(jī)無(wú)感方波控制驅(qū)動(dòng)方案

    適合用于電機(jī)控制。無(wú)感方波控制算法是一種簡(jiǎn)單有效的電機(jī)控制算法,不需要使用霍爾傳感器,可以降低硬件成本。 本次采用的電機(jī)驅(qū)動(dòng)板仍然為CW32_BLDC_EVA V5開(kāi)發(fā)板,具體開(kāi)發(fā)板的信息可以翻看上一節(jié)《基于CW32的無(wú)
    的頭像 發(fā)表于 04-24 15:38 ?1594次閱讀
    基于CW32的無(wú)<b class='flag-5'>刷</b>直流空心杯電機(jī)無(wú)感方波控制驅(qū)動(dòng)方案

    無(wú)直流電機(jī)驅(qū)動(dòng)單元

    NEWUnitBLDCDriverUnitBLDCDriver是一款專為無(wú)直流電機(jī)(BLDC)設(shè)計(jì)的驅(qū)動(dòng)單元,采用I2C通信接口,可同時(shí)掛載多路電機(jī)進(jìn)行控制。適用于風(fēng)扇、小型泵等小型無(wú)直流電機(jī)
    的頭像 發(fā)表于 04-13 08:29 ?460次閱讀
    無(wú)<b class='flag-5'>刷</b>直流電機(jī)驅(qū)動(dòng)單元

    PMSM控制利用foc算法,靜止?fàn)顟B(tài)下是如何啟動(dòng)的?

    PMSM控制利用foc算法,靜止?fàn)顟B(tài)下是如何啟動(dòng)的,跟無(wú)直流電機(jī)梯形波控制的啟動(dòng)方案一樣嗎?
    發(fā)表于 04-01 06:22

    #FPGA入門(mén) #FPGA考試 FPGA邏輯設(shè)計(jì)小程序訓(xùn)練

    fpga
    明德?lián)P助教小易老師
    發(fā)布于 :2023年12月16日 11:10:34

    2023年電子設(shè)計(jì)大賽G火源設(shè)計(jì)方案

    2023年電子設(shè)計(jì)大賽G火源設(shè)計(jì)方案
    的頭像 發(fā)表于 11-03 09:04 ?1387次閱讀
    2023年電子設(shè)計(jì)大賽G<b class='flag-5'>題</b>火源設(shè)計(jì)方案

    2023電賽A國(guó)獎(jiǎng)CW32 開(kāi)源分享

    電賽A開(kāi)源分享,主控為CW32
    的頭像 發(fā)表于 11-02 10:16 ?2066次閱讀
    2023電賽A<b class='flag-5'>題</b>國(guó)獎(jiǎng)CW32 開(kāi)源分享

    Android手機(jī)新手入門(mén)教程

    電子發(fā)燒友網(wǎng)站提供《Android手機(jī)新手入門(mén)教程.doc》資料免費(fèi)下載
    發(fā)表于 10-30 09:33 ?0次下載
    Android手機(jī)<b class='flag-5'>新手</b>入門(mén)教程

    電機(jī)驅(qū)動(dòng),橋驅(qū)

    熟悉Trinamic產(chǎn)品的客戶,經(jīng)常會(huì)有這樣的問(wèn)題:–Trinamic的步進(jìn)和伺服芯片性能很好,有沒(méi)有其他類型電機(jī)的驅(qū)動(dòng)芯片?–我們有自己的步進(jìn)驅(qū)動(dòng)算法,Trinamic集成的算法我們用不上,是否有
    的頭像 發(fā)表于 10-21 08:11 ?926次閱讀
    有<b class='flag-5'>刷</b>電機(jī)驅(qū)動(dòng),橋驅(qū)

    哪些錯(cuò)誤PLC新手容易犯?

    PLC新手在使用和編程PLC時(shí)容易犯以下一些常見(jiàn)錯(cuò)誤: (1)電氣接線錯(cuò)誤:PLC的輸入和輸出需要正確地與外部設(shè)備進(jìn)行連接。新手可能會(huì)犯接線錯(cuò)誤,例如接錯(cuò)線圈端子、斷開(kāi)或短路電線等。這可能導(dǎo)致PLC
    的頭像 發(fā)表于 10-11 17:10 ?711次閱讀

    2023年電賽E國(guó)獎(jiǎng)開(kāi)源分享

    2023年電賽E開(kāi)源分享,主控為CW32!
    的頭像 發(fā)表于 10-09 16:18 ?6581次閱讀
    2023年電賽E<b class='flag-5'>題</b>國(guó)獎(jiǎng)開(kāi)源分享

    無(wú)感無(wú)直流電機(jī)之電調(diào)設(shè)計(jì)攻略

    無(wú)感無(wú)直流電機(jī)之電調(diào)設(shè)計(jì)全攻略電子檔,使用STM8開(kāi)發(fā),無(wú)感方波比較器算法
    發(fā)表于 10-07 06:55

    硬件經(jīng)典面試100分享

    學(xué)電人員必備;硬件經(jīng)典面試100;面向電子行業(yè)的面試基礎(chǔ)問(wèn)題,提前進(jìn)入職業(yè)的大門(mén)
    發(fā)表于 09-27 06:23