如何科学的打开 Leetcode
Leetcode 對于學計算機專業的同學,就如 PhotoShop 對于學設計的同學來說,最熟悉不過了。
考慮到讀者的范圍比較廣,先對 Leetcode 做個科普。
它是一個編程實踐網站,主要注重于培養使用者的編程技巧,去解決一些巧妙的算法題。
這是它的官網,網站地址[1]。
Leetcode 官網很久以前,還是在大學的時候,有師兄對我意味深長的說,如果把 Leetcode 上面的題目做上七遍,就有很大概率能夠通過谷歌的面試。
雖然有點夸張,這句話還是對我幼小的內心,產生了不小的震撼。畢竟,在當時的我看來,谷歌和賺錢,是同義詞。
在 2019 年的秋招之前,我曾經系統的刷過一段 Leetcode 算法題。平均每天做一道,堅持了有三四個月時間,從三月份到七月份。
刷題記錄,一個格子表示一天,顏色越深表示做題越多這對我的秋招面試很有幫助,拿到了基本所有一線互聯網公司的 offer,沒有一次是因為考察編程題吃虧的。而且,其實之前我的算法編程能力也不強。
我的方法觀里,有三個重要的點,分別是:
?找到科學的刷題順序?學習優秀的解題方案?及時整理題目的套路
找到科學的刷題順序
目前 Leetcode 收錄的算題題目,超過了一千道,數量非常之多。同學們也都是很有想法的人,于是,八仙過海,各有各的姿勢。
蠻力刷題法?按順序來,一道一道的做,從 001 到 999,希望自己的編程能力愈來愈強,最終天長地久。該法對吃苦耐勞式同學最佳。
規避挫折法?Leetcode 很人性化的把題目的難度劃分為:容易題,中等題,難題。為了避免刷題時候,身心受到打擊摧殘,只做簡單題。該法對心理脆弱、亟需成就感同學最佳。
隨機數法?隨機生成一個題目數,然后解決這個題目,該法對探險愛好者最佳,畢竟,每一次做題,都是一次驚喜。
與上面闡述的不同,我所推薦的還是,系列學習法:在 Leetcode 上面,算法題目的類型劃分的較為清楚,例如數組類、鏈表類、二叉樹類等。刷題時,可以每次挑選一個序列的題目來做。
紅框中可以看到各種題目類型例如,我這兩天先集中精力解決「鏈表」類題型,將與鏈表算法有關的變體,系統的做一遍,不斷的強化腦海中與之有關的記憶細胞。
舉個形象的例子,如果我去果園摘菜,東摘一顆葡萄,西摘一顆草莓,稀里糊涂的來回轉悠。最終我會疲于奔走,籃子里也會雜亂不堪,還得騰出精力來進行整理。
但如果我先把成熟的葡萄都摘取了,然后再來處理草莓,就會大大節省我的整理時間和奔波消耗。
學習優秀的解題方案
刷題的時候,每遇到一道題,我都會全神貫注的思考解題思路,如果能夠馬上想出來,就動手編程;如果十分鐘之內,都沒有清晰可行的思路,我會果斷的選擇放棄。
我平時的工作、任務比較繁忙,不容許我花太多的時間去推敲解題策略。所以,這種方式是無奈的選擇,經過實踐,我發現也很高效。
需要注意的是,這里的放棄,不是真正的放棄,而是說我會去看別人的解決方案。當然,即使我做出了題目,也會去看看別人的解決方案。Leetcode 的設計機制,很容易能夠讓我們做到這一點。
每道題目都有一個?Discuss?討論模塊,我們點擊進去,會發現,這里貼滿了前人發表的各種解決方案,排名靠前的,一般是最為優秀的,或是時間和空間復雜度消耗很低,或是代碼實現優美,思路清晰易懂。
一道題目的 Discuss 討論模板總之,閱讀前幾名的方案,我經常覺得是一種享受,時不時會發出贊嘆「原來這題還可以這么寫」。偶爾會樂在其中,也算枯燥刷題生活的苦中作樂。
及時整理題目的套路
人的記憶,是不斷更新、不斷遺忘的。做過的一些題目,過了一段時間,可能又還給了 Leetcode。
我很清楚自己生而為人的這種劣勢,盡量用科學的方法去加以彌補。俗話說,好記性不如爛筆頭,我會對刷過的題目,分門別類的進行整理總結。這個過程,是對出題人套路的深度揣摩,有利于讓自己學會,透過現象看本質。
例如,以下就是我刷題過程中的整理的常見套路,雖然不夠全,但對我來說夠用了,你也可以整理自己的。
另外,Leetcode 也有中文網站,網站地址[2]。
至此,整理我刷題過程的所知所感,希望對大家有益,嘿嘿。如果你對我整理的題型比較感興趣,公眾號內回復「?秋招?」即可領取整理好的 pdf 文檔。
References
[1]?網站地址:?https://leetcode.com
[2]?網站地址:?https://leetcode-cn.com
總結
以上是生活随笔為你收集整理的如何科学的打开 Leetcode的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【PySpark入门】手把手实现PySp
- 下一篇: 手把手教你如何在阿里云ECS搭建Pyth