<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          算法題從入門到放棄?刷了幾千道算法題,關(guān)于如何刷題有些話我想對(duì)...

          共 4249字,需瀏覽 9分鐘

           ·

          2020-03-20 23:23

          09acce834cfb6c6c19e5ebadbd1f0cb5.webp


          ? ? ?作者:Rocky0429


          ? ? ?來源:Python空間



          786a4705cddbf7b866768991f257ab65.webp



          大家好,我是 Rocky0429,一個(gè)曾經(jīng)在 ACM 界劃水多年的蒟蒻...
          在“刷了幾千道算法題,這些我私藏的刷題網(wǎng)站都在這里了!”這篇文章中,我有說過要寫一篇如何刷題的文章,然而好幾個(gè)月過去了,我實(shí)在沒法舔著臉繼續(xù)拖下去了...
          所以,我來交作業(yè)了...
          af33136e48bb11872b858bbedaf1306d.webp
          我好多次在想要如何寫這篇文章,試圖去回想我刷題的時(shí)光,當(dāng)時(shí)的種種感覺拼接起來,一次次動(dòng)筆,又一次次的放棄。
          其實(shí)諸多糾結(jié),我試圖遵循常規(guī),將這種刷題經(jīng)驗(yàn)公式化,列個(gè)一二三四,期間穿插一些算法題來 give an example,這樣好像才是真正像是經(jīng)驗(yàn)的樣子,但我總覺的哪里奇怪。
          我問自己,當(dāng)年還是個(gè)小白,對(duì)刷題一無所知的我是否想要去看這樣的文章,我想答案應(yīng)該是不會(huì)...
          5ddfe9e91543d62d730b2a1811c62f86.webp

          所以這篇文章我可能會(huì)寫成自己想寫的樣子,它不會(huì)教你速成,沒有捷徑,單純是一個(gè)當(dāng)年機(jī)緣巧合入了 ACM 的混子,有一段很長(zhǎng)的(三年)連續(xù)刷題的時(shí)間,恰好有一點(diǎn)自己感想的碎碎念。


          以下僅代表個(gè)人想法...


          62087f702d47ffd37813205a3f46d3d3.webp


          很多人開始他的刷題之路因?yàn)楦鞣N各樣的原因:進(jìn)大廠、研究生復(fù)試或者參加競(jìng)賽拿牌,當(dāng)然也可能是因?yàn)橄矚g。其實(shí)不管你抱著何種目的開始,我希望你能一直在刷題這條路上走下去,畢竟除了提高自己解決問題和寫代碼的能力這種顯而易見的好處,也能當(dāng)作無聊時(shí)候的一種消遣...


          af69d60e40a32feded78ba1dd0e69d85.webp


          其實(shí)隨著刷題的深入,我發(fā)現(xiàn)刷題其實(shí)就是分為兩步,第一步有思路,即知道用哪種姿勢(shì)怎么解題;第二步是實(shí)現(xiàn),即將你的思路轉(zhuǎn)化為代碼。接下來我所有的廢話都是圍繞這兩步來展開。


          885f9da2b2683f8e0c3381ff03504cdb.webp



          0x01 有思路


          先說第一步:有思路。


          算法題刷多了,你就會(huì)發(fā)現(xiàn),最后其實(shí)在你腦子里記住的不是實(shí)現(xiàn)這道題的代碼,而是解這道題的思路。


          當(dāng)我們刷了幾百道幾千道算法題的時(shí)候,你不可能記住每道題的代碼,但是你可能知道這道題的思路,也就是出現(xiàn)類似“這道題我見過,我知道用這樣那樣的方法可以做出來”。有了思路,其實(shí)把它實(shí)現(xiàn)出來就是自然而然的事兒了,當(dāng)然可能有人說知道了思路也不知道怎么實(shí)現(xiàn),現(xiàn)在我先不說,這是我們下一步要講的問題。


          704ff8797ee62d7cddc0adf91c686e79.webp


          上面說的是我們要走到的目的地,那如何走上這條路,從而到刷題刷到思路“泉涌”呢?其實(shí)很簡(jiǎn)單,我們從小到大一直在被動(dòng)習(xí)慣的四個(gè)字:題海戰(zhàn)術(shù)。


          9d8243fdde7f47e7448652e6da8fbb5e.webp


          題海戰(zhàn)術(shù),說白了就是多刷題,見多才能識(shí)廣。


          但這里的多刷題,不是指多瞎刷題,而是有方法的去刷。至于刷題的網(wǎng)站我已經(jīng)在文章的開頭放鏈接了,不知道去哪找題的可以看一下。


          首先說什么是瞎刷題,就是看到一道刷一道,這是很多剛開始刷題的同學(xué)容易犯的毛病。


          有的追求數(shù)量,刷了一堆簡(jiǎn)單題,沉迷在 AC 的快感中不能自拔,在深深的自我感動(dòng)中依然菜的扣腳;

          有的追求無腦,看到一道題就去網(wǎng)上搜答案,以為會(huì)解決問題,實(shí)則搜到了還看不懂,正好一勞永逸,給自己下了不是這塊料的斷言,成功的做到了開始即結(jié)束。


          別問我為什么知道,我才不會(huì)告訴你當(dāng)年我就是這樣...


          ff45f385d538fbaf00074812a9321ec6.webp


          其實(shí)怎么用正確的題海戰(zhàn)術(shù),在我看來,其實(shí)也還是兩步,第一步多題一解,第二步一題多解。


          當(dāng)然在此之前,我覺得你得先搞明白什么是時(shí)間復(fù)雜度和空間復(fù)雜度,不然不懂這些指標(biāo),你也不知道算法對(duì)于你當(dāng)前題目的優(yōu)劣。之前寫過一篇舊文,有興趣的可以看一下。


          循序漸進(jìn)帶你學(xué)習(xí)時(shí)間復(fù)雜度和空間復(fù)雜度。


          0x01-1?多題一解


          多題一解,就是把多種同類型的題先放在一起來做,也就是俗稱的刷專題。下面是我當(dāng)年刷題的一部分分類的截圖:


          b5ccf45302a336ef5f16428b209f147d.webp


          2a8b16ac15faaf50cabdcdd29bd4322f.webp

          很多大佬說做題要追求完美,一道題來 N 種姿勢(shì),但是對(duì)于剛開始起步的同學(xué)來說,一道題帶著多解的思想包袱去刷,本身就是一種負(fù)擔(dān)。你很難指望初學(xué)者能一上來就一題多解,沒那么多見識(shí),腦闊里沒儲(chǔ)備那么多的算法類型,能夠暴力破解且跑通就已經(jīng)是燒高香了。


          ea663be9308c6694042b9adba5f9e6aa.webp


          這里再多提一嘴,關(guān)于網(wǎng)上搜答案這件事,答案可以搜,但是不要上來一看題,感覺自己不會(huì)就立馬搜答案,要嘗試思考,多在草稿紙上寫寫畫畫,實(shí)在想不出來再去搜。


          6ab8c6867da27c3be80b6888beaf12bc.webp


          搜到的答案我不希望你去看別人的代碼,按照別人的代碼一步步的寫出來其實(shí)本身沒有多大意義,真正有意義的是別人的思路,通過別人的思路來自己實(shí)現(xiàn)出現(xiàn),這才是最應(yīng)該做的。


          這樣做的好處是,你可以很快了解一種類型題目的做題方法,加深對(duì)某類算法的理解,總結(jié)出做題的套路,這算是一種抽象的概括能力。很多時(shí)候你就會(huì)發(fā)現(xiàn),題目不過是在某類解決辦法方面做加法減法。


          f5cd36ac1316a24c133a61519822f1c2.webp


          0x01-2 一題多解


          其實(shí)這個(gè)不用刻意去追求一題多解的能力,刷的專題多了,碰到的題目多了,自然而然你碰到一道題的時(shí)候腦袋里就會(huì)有想法,覺的可以這樣做,也可以那樣做,這個(gè)時(shí)候你就可以對(duì)比不同的時(shí)間復(fù)雜度和空間復(fù)雜度,選擇當(dāng)前的最優(yōu)解法。


          說一題多解,其實(shí)就是希望你在碰到一個(gè)問題的時(shí)候能夠多想一步,一步一步再一步,不同維度不同姿勢(shì)都嘗試一下。剛開始這可能比較難,畢竟這涉及到一個(gè)改變,因?yàn)槿硕际怯卸栊缘?,畢竟只求一解比自找麻煩的求多解舒服多?..


          562f4a93e183057780b4691de9b2fda0.webp


          題目見的多了你就會(huì)發(fā)現(xiàn),很多時(shí)候你會(huì)碰到這種情況:A 題你有 5 種方法去解決它,改變它的某一個(gè)條件變成 B 題,作為 A 題的相似題 B,可能這個(gè)時(shí)候你照搬 A 的解法來解決 B,你只剩下 3 種或者更少的解法可以解決 B 題,如果你只會(huì) 1 種解法,剛好這種解法失效,那你就只能再另想它法。


          所以一題多解的好處也是顯而易見的,就相當(dāng)于你的手里多了很多的選項(xiàng),選項(xiàng)多了不管你在面試或是其它時(shí)候,都能手里有牌可打。


          8e6dd8c8cbb4bed42c6a46c067acf605.webp


          在這里我又要多提一嘴,追求一題多解并不意味著“不擇手段”的追求題解數(shù)量的堆疊,也就是不要過分追求所謂奇淫技巧的解法,而這恰恰是許多同學(xué)容易犯的毛病,錯(cuò)誤的認(rèn)為了奇淫技巧等于水平高超,在我看來這個(gè)除了能引來別人一句臥槽的驚訝,從而帶來一點(diǎn)內(nèi)心虛榮心的滿足以外,其余的用處不大,看個(gè)熱鬧就得了。畢竟魯迅先生曾經(jīng)說過:“Use your best judgement”。


          889eab55b8a28bd10f5c7a1c82bd1522.webp


          當(dāng)然我也不是全盤否定技巧,但是你連個(gè)兩三百道題都沒刷完,你就在這給我講你要技巧,我會(huì)認(rèn)為你是在耍流氓...



          0x02?實(shí)現(xiàn)


          一道題有了思路,其實(shí)這道題的 90% 你已經(jīng)解決了,把它實(shí)現(xiàn)出來按理來說就是自然而然的事兒了。


          ea0ac9e3e739ee45e404b7b69d5de00a.webp


          當(dāng)然可能有同學(xué)知道了思路,但是就卡在這 10% 不知道怎么實(shí)現(xiàn)上,那這就是你寫代碼的能力問題,其實(shí)一樣的,這就是不熟練,不熟練的原因就是練少了。


          其實(shí)這個(gè)問題的唯一解還是所謂的“題海戰(zhàn)術(shù)”,多練習(xí),唯手熟爾。


          c6e847fa370ebb1add9af276febffa73.webp


          剛開始的時(shí)候不管是書上的例題,一些簡(jiǎn)單的水題或者你想實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的東西,按照你的想法寫出來或者看一遍別人怎么寫的,自己再一步一步的默敲,不要怕麻煩,一定要自己動(dòng)手,不要看會(huì)了,我們都知道看會(huì)了其實(shí)不是真正的會(huì)。但是慢慢當(dāng)你習(xí)慣了這種方式,你的代碼能力會(huì)潛移默化的變強(qiáng)。


          159fcd54ffcd63e1371c69e5b0d4f458.webp


          別問我為什么知道,我難道要說作為一個(gè)當(dāng)年上了大學(xué)半年還沒寫過一次超過 20 行的代碼的男人,經(jīng)過一個(gè)寒假以后,能切百十行代碼的題?


          也太丟面兒了吧,說好的整個(gè)學(xué)霸人設(shè)呢...


          23145942ce0db00a0a071b6a4d59c0b4.webp



          0x03?第三步


          咦?不是只有兩步嘛,哪來的第三步?


          嘿嘿,總得給能堅(jiān)持看我說廢話看到這里的同學(xué)開個(gè)小小灶不是...


          cc4d617699e0568ecd8771e4c55eee0c.webp


          其實(shí)還有兩點(diǎn)是我想說的,而且這兩點(diǎn)是我覺得在整個(gè)過程中最重要的。


          0x03-1?做總結(jié)


          怎么說呢,做總結(jié)這件事的好處,誰做誰知道,不信你就試試...


          26f1944f100d8339491c1768412dbf74.webp


          每道題有每道題的總結(jié),每種類型的題有某類題的總結(jié),千萬不要怕麻煩,雖然剛開始的時(shí)候確實(shí)會(huì)很麻煩...


          每每回想起來,我最后悔的就是在我剛開始刷題的時(shí)候沒有做總結(jié)。當(dāng)年集訓(xùn)隊(duì)老師告訴我們每道題做完都要把題解發(fā)布到 CSDN 上,記錄自己的思路,解題方式和代碼。這件事乍一聽我覺得太麻煩,覺得“有這個(gè)時(shí)間我多刷道題它不香嘛”,一直當(dāng)作耳旁風(fēng)。


          95fa650f18b204204cac697afa93a1ff.webp


          后來真正開始在 CSDN 上發(fā)題解,并不是我突然頓悟,而是集訓(xùn)隊(duì)老師看我們太懶,強(qiáng)制執(zhí)行,然而這個(gè)強(qiáng)制,在經(jīng)過初期的不適以后,慢慢的讓我形成了做什么都要總結(jié)記錄的習(xí)慣,一下子就寫了 6 年。下面是剛開始的一些截圖:


          b6af6e0d41d3f739e631e059eb545be9.webp


          習(xí)慣性梳理總結(jié),在這個(gè)過程中重新產(chǎn)生更多的認(rèn)識(shí),理解更深,有更多的想法,無論后來成為 CSDN 的博客專家(Rocky0429)或者后來開始寫公眾號(hào)(Python空間,id:Devtogether),都是因?yàn)檫@種積累,我因此獲益,對(duì)我們老師感激一生


          0x03-2?保持熱情


          保持熱情,不僅僅是能堅(jiān)持,而要在堅(jiān)持上最好能帶有一點(diǎn)興趣。刷題真的是一個(gè)很漫長(zhǎng)的過程,如何在這個(gè)過程中能堅(jiān)持下去真的很難做到...


          71c745f7aabb60c91183e80f0f43aefe.webp


          我覺得你最好有一個(gè)最終的目標(biāo),這個(gè)很多開始刷題的同學(xué)肯定都有,不然沒人閑著沒事找事去刷題,有了最終的目標(biāo)朝著這個(gè)方向去努力,同時(shí)把這個(gè)過程分成一部分一部分,比如拿刷專題來說,我這段時(shí)間刷鏈表,下段時(shí)間刷貪心,再下段時(shí)間刷 dp...


          將目標(biāo)量化為可衡量的每一段,自己有了掌控感,一步一步的向著最終的目標(biāo)前進(jìn),知道自己離著還有多遠(yuǎn),不至于半途而廢。


          拿我自己來說,當(dāng)年搞 ACM,半年以后我已經(jīng)準(zhǔn)備放棄了,那段時(shí)間完全迷茫,覺得自己水平很差,沒有機(jī)會(huì)去參加比賽,不可能拿到獎(jiǎng)牌。那段時(shí)間我開始去尋找別的出路,去參加 Python 的社團(tuán),準(zhǔn)備轉(zhuǎn)去做項(xiàng)目。


          渾渾噩噩了一圈,最后還是回去做 ACM,一方面是不想讓自己半年的努力付諸東流,對(duì)拿牌子的執(zhí)念,更多的是我發(fā)現(xiàn)坐在那寫項(xiàng)目和做題比起來,我更喜歡 AC 的快感。


          880a42c7a23bf69a87b7b4a6e2d78d3d.webp



          0x04 寫在之后


          以上就是我的一點(diǎn)點(diǎn)經(jīng)驗(yàn),其實(shí)沒有什么新鮮的,有點(diǎn)啰嗦,也不一定能讓你有什么進(jìn)步。我一直覺的只要我們付出了時(shí)間和努力,開始向更好的方向邁出第一步,我們解決問題和寫代碼的能力就會(huì)潛移默化的提高。


          在這個(gè)過程中,收獲的遠(yuǎn)比去解決問題更有成就感,當(dāng)然這種感同身受更多的需要你自己在這個(gè)過程中去體驗(yàn)。


          可能末了整篇文章最有價(jià)值的只有四個(gè)字 - 題海戰(zhàn)術(shù)。


          希望你在變好的路上越走越遠(yuǎn)...


          2a2455f4320d6a2b300ec74c2821b621.webp



          -END-



          ◆?◆?◆ ?◆?




          長(zhǎng)按二維碼關(guān)注我們



          數(shù)據(jù)森麟公眾號(hào)的交流群已經(jīng)建立,許多小伙伴已經(jīng)加入其中,感謝大家的支持。大家可以在群里交流關(guān)于數(shù)據(jù)分析&數(shù)據(jù)挖掘的相關(guān)內(nèi)容,還沒有加入的小伙伴可以掃描下方管理員二維碼,進(jìn)群前一定要關(guān)注公眾號(hào)奧,關(guān)注后讓管理員幫忙拉進(jìn)群,期待大家的加入。


          管理員二維碼:



          猜你喜歡

          ?笑死人不償命的知乎沙雕問題排行榜

          ?用Python扒出B站那些“驚為天人”的阿婆主!

          ?互聯(lián)網(wǎng)大佬學(xué)歷&背景大揭秘,看看是你的老鄉(xiāng)還是校友

          ?上萬條數(shù)據(jù)撕開微博熱搜的真相!

          ?你相信逛B站也能學(xué)編程嗎?

          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大香蕉好大想要 | 黄片毛片在线观看 | 免费看逼的网站 | 影音先锋男人色 | 久久久一区二区三区四曲免费听 |