科學(xué)刷題!
你好,我是公子龍,今天來聊聊科學(xué)刷算法題的方法。Leetcode 對于學(xué)計算機專業(yè)的同學(xué),就如 PhotoShop 對于學(xué)設(shè)計的同學(xué)來說,最熟悉不過了。
考慮到讀者的范圍比較廣,先對 Leetcode 做個科普。
它是一個編程實踐網(wǎng)站,主要注重于培養(yǎng)使用者的編程技巧,去解決一些巧妙的算法題。這是它的官網(wǎng),網(wǎng)站地址百度一下就能夠找到哦。

很久很久以前,還是在大學(xué)的時候,有師兄對我意味深長的說,如果把 Leetcode 上面的題目做上七遍,就有很大概率能夠通過谷歌的面試。
雖然有點夸張,這句話還是對我幼小的內(nèi)心,產(chǎn)生了不小的震撼。畢竟,在當(dāng)時的我看來,谷歌和賺錢,是同義詞。
參與秋招那年,我曾經(jīng)系統(tǒng)的刷過一段 Leetcode 算法題。平均每天做一道,堅持了有三四個月時間,從三月份到七月份。

這對我的秋招面試很有幫助,拿到了基本所有一線互聯(lián)網(wǎng)公司的 offer,沒有一次是因為考察編程題吃虧的。而且,其實之前我的算法編程能力也不強。
我的方法觀里,有三個重要的點,分別是:
?找到科學(xué)的刷題順序?學(xué)習(xí)優(yōu)秀的解題方案?及時整理題目的套路
找到科學(xué)的刷題順序
目前 Leetcode 收錄的算題題目,超過了一千道,數(shù)量非常之多。同學(xué)們也都是很有想法的人,于是,八仙過海,各有各的姿勢。
蠻力刷題法 按順序來,一道一道的做,從 001 到 999,希望自己的編程能力愈來愈強,最終天長地久。該法對吃苦耐勞式同學(xué)最佳。
規(guī)避挫折法 Leetcode 很人性化的把題目的難度劃分為:容易題,中等題,難題。為了避免刷題時候,身心受到打擊摧殘,只做簡單題。該法對心理脆弱、亟需成就感同學(xué)最佳。
隨機數(shù)法 隨機生成一個題目數(shù),然后解決這個題目,該法對探險愛好者最佳,畢竟,每一次做題,都是一次驚喜。
與上面闡述的不同,我所推薦的還是,系列學(xué)習(xí)法:在 Leetcode 上面,算法題目的類型劃分的較為清楚,例如數(shù)組類、鏈表類、二叉樹類等。刷題時,可以每次挑選一個序列的題目來做。

例如,我這兩天先集中精力解決「鏈表」類題型,將與鏈表算法有關(guān)的變體,系統(tǒng)的做一遍,不斷的強化腦海中與之有關(guān)的記憶細胞。
舉個形象的例子,如果我去果園摘菜,東摘一顆葡萄,西摘一顆草莓,稀里糊涂的來回轉(zhuǎn)悠。最終我會疲于奔走,籃子里也會雜亂不堪,還得騰出精力來進行整理。
但如果我先把成熟的葡萄都摘取了,然后再來處理草莓,就會大大節(jié)省我的整理時間和奔波消耗。
學(xué)習(xí)優(yōu)秀的解題方案
刷題的時候,每遇到一道題,我都會全神貫注的思考解題思路,如果能夠馬上想出來,就動手編程;如果十分鐘之內(nèi),都沒有清晰可行的思路,我會果斷的選擇放棄。
我平時的工作、任務(wù)比較繁忙,不容許我花太多的時間去推敲解題策略。所以,這種方式是無奈的選擇,經(jīng)過實踐,我發(fā)現(xiàn)也很高效。
需要注意的是,這里的放棄,不是真正的放棄,而是說我會去看別人的解決方案。當(dāng)然,即使我做出了題目,也會去看看別人的解決方案。Leetcode 的設(shè)計機制,很容易能夠讓我們做到這一點。
每道題目都有一個 Discuss 討論模塊,我們點擊進去,會發(fā)現(xiàn),這里貼滿了前人發(fā)表的各種解決方案,排名靠前的,一般是最為優(yōu)秀的,或是時間和空間復(fù)雜度消耗很低,或是代碼實現(xiàn)優(yōu)美,思路清晰易懂。

總之,閱讀前幾名的方案,我經(jīng)常覺得是一種享受,時不時會發(fā)出贊嘆「原來這題還可以這么寫」。偶爾會樂在其中,也算枯燥刷題生活的苦中作樂。
及時整理題目的套路
人的記憶,是不斷更新、不斷遺忘的。做過的一些題目,過了一段時間,可能又還給了 Leetcode。
我很清楚自己生而為人的這種劣勢,盡量用科學(xué)的方法去加以彌補。俗話說,好記性不如爛筆頭,我會對刷過的題目,分門別類的進行整理總結(jié)。這個過程,是對出題人套路的深度揣摩,有利于讓自己學(xué)會,透過現(xiàn)象看本質(zhì)。
例如,以下就是我刷題過程中的整理的常見套路,雖然不夠全甚至很少,但對我來說夠用了,你也可以整理自己的。

另外,Leetcode 也有中文網(wǎng)站。至此,整理我刷題過程的所知所感,希望對大家有益,嘿嘿。如果你對我整理的題型比較感興趣,公眾號內(nèi)回復(fù)「 秋招 」即可領(lǐng)取整理好的 pdf 文檔。
你好,我是公子龍,畢業(yè)于中科院,前大型計算機競賽冠軍,現(xiàn)算法工程師,拿過九家大廠的 offer 。
北漂七年,從小白到計算機競賽冠軍,讀研時通過實習(xí)和比賽收入 50 萬,點擊藍字查看我的編程之路。

