labuladong


由於 labuladong 的算法網站頻繁被攻擊,且國內訪問速度可能比較慢,所以本站同時開放多個鏡像站點:

https://labuladong.gitee.io/algo/

https://labuladong.github.io/algo/

這兩個站點的內容都是一樣的,你可以自行選擇訪問速度較快的站點開始學習。

PC 端請收藏上述網站地址;手機端請關注 labuladong 公眾號閱讀最新文章,另外《labuladong 的算法小抄》已出版,關注公眾號可獲取最新折扣信息:

本網站目前可以手把手帶你解決 200 道 LeetCode 算法問題,而且在不斷更新,全部基於 LeetCode 的題目,涵蓋了所有題型和技巧,我已經把在每篇文章的開頭加上了該文章可以解決的 LeetCode 題目鏈接,可以看完文章立即去拿下對應題目。

另外,配合我的刷題插件和 PDF 教材在本站學習的體驗會更好,比如如果你習慣在英文版 LeetCode 刷題,可以通過 刷題插件 將本站所有題目鏈接改為 LeetCode 的鏈接。

插件和配套 PDF 的下載方法見這里: labuladong 的刷題三件套正式發布

關於我

簡單介紹一下我自己,我應該是 2018 年就開始刷算法題,順便開通了自己的公眾號,誕生了 labuladong 這個昵稱,之后就一直在算法領域持續輸出,2020 年在 GitHub 開源了算法倉庫 fucking-algorithm,沒想到火遍了全網,一年過去了,現在這個倉庫已經快有 100k star 了。

由於這個倉庫的火爆,有很多出版社找來尋求出版,我在去年年底出版了紙質書《labuladong 的算法小抄》,銷量一直非常穩定,為了感謝公眾號讀者一直以來的支持,我把公眾號的大部分文章放到了網站上,方便大家學習。

眾所周知現在技術崗面試內卷嚴重,算法基本上是必考項目了,我知道很多人對算法並不是真愛,所以被算法搞得很頭痛。

我也是這樣過來的,但靠着自己的努力和一些技巧,在畢業秋招斬獲了 13 個 offer,你隨便說一個大廠,我都拿到了 offer。

說這些,不是凡爾賽,說實話刷個題面個試真的不算啥,我身邊的大佬也比較多,比找工作難的事情多着呢。

我想說的是,其實刷題也好,面試也好,都是有技巧的,我希望把我的技巧和經驗分享給大家。如果你有刷算法題的需求覺得算法難,面試筆試難,那么我可以提供一些捷徑,避免你走太多彎路。

另外,我奉行的原則是「少即是多」,致力於提高「知識密度」而不是文章數量。

舉個簡單的例子,你可以看到很多算法相關的博客/倉庫,動輒有四五百篇文章,每篇文章其實就是一道題的解法代碼 + 三言兩語的注釋甩在那里,你也許能看懂,但很難做到舉一反三,真正會做那一類題目。

而我會嚴格限制文章數量的增長,把精力放在提高單篇文章質量上面,我稱之為「知識密度」。隨着我自己不斷刷題和思考,如果覺得某篇歷史文章的知識密度不夠高,那么我會毫不猶豫地下架歷史文章,重新構思和發布一篇更干,更通用的新文章。

學習算法可能遇到的問題

1、題太多,不知道從哪里開始刷。

現在 LeetCode 已經 2000 多道題目了,難道我要全部刷完,才算搞定算法了嗎?

我應該怎么刷題?按題號一道道刷?按分類刷?聽說動態規划相關的問題經常出現,干脆直接開始刷動態規划問題?

我理解大家這種急切的心情,但是在刷最熱門的類型之前,有一些必要的前置知識,如果你不掌握的話,很可能一臉懵逼;但如果按照一定的章法掌握之后,就能找到抓手,成功賦能,輕易地打出一套算法組合拳(手動滑稽)。

2、沒有人指導,刷一道題就僅僅是刷了一道題而已,很難舉一反三。

這是很多朋友都存在的問題,尤其是在剛開始刷題的時候,很難在做完一道題后總結出一些通用的技巧,在遇到新的問題時運用出來,所以很多讀者調侃自己「一看都會,一做就廢」。

不需要氣餒,在剛剛刷題的過程中,積累的算法技巧有限,難以舉一反三很正常。但如果有人能夠給一些思路上的引導,會讓你學習算法的效率事半功倍。

3、被有意無意地灌輸錯誤的思想,以為算法很高大上,非要啃完算法導論才算是入門,所以從心理上就畏懼算法。

我對這個問題有切身體會,剛學算法那會兒,我會去搜索過各種資料、經驗貼之類的,想快速入門。

現在回頭在看,就覺得很有意思,我是說很多寫經驗貼的作者心態很有意思。

舉個例子,很多「大佬」,你問他怎么入門算法,他告訴你看《算法導論》,然后又甩給你一堆英文課程,還強調一定要看英文的哦,中文的翻譯不好。

這就好比,你是一個胖子,去問人家怎么減肥,人家告訴對方,每次做 100 個俯卧撐,100 個引體向上,一天三次,肯定有效,你看我就是這樣練出來的!

呵呵,我要是真能做到這些,還用得着來問你么?不過你仔細琢磨琢磨,給出這種回答是基於一種什么心理?

實際上他根本不在乎你的訴求,他只是想告訴你:我做過這些,我吃過這些苦,我牛逼吧,我厲害吧,你羡慕吧,你做不到吧~

不過話說回來,這種小九九人皆有之,我也不例外,我也時不時想證明自己牛,想證明自己和別人不一樣,我以前做分享,也會多少有點故弄玄虛的傾向。

但后來我發現,真正幫助別人解決問題,是更能得到對方的認可的,這也是我的公眾號能夠很快成長的原因。

所以大家可以放心,我的這份教程是「老少皆宜」,非常接地氣的,最能解決學習算法這個問題的。

都說算法難,到底難在哪里

1、技巧較多,難以整活兒

各種算法技巧確實比較繁雜,初學者很容易碰到沒見過的技巧,碰到時就大呼牛逼,覺得自己菜。比如說判斷一個單鏈表是否成環的算法,一般人確實很難想到。

這也是為什么我說一開始刷算法題不要死磕,因為技巧儲備還不夠。

比如現在出一道數組的題目,你的腦海里能浮現出什么算法技巧?最起碼應該想到 二分查找、 快慢指針、 左右指針、 滑動窗口、 前綴和數組、 差分數組

這些技巧就好比工具庫里各種型號的工具,你得有的選,才能運用出來不是嗎?那么對於初學者,工具庫里面就沒什么東西,拿什么死磕?用鋸子去挖石頭,這不扯淡呢嗎?

那么如何解決技巧儲備不足的問題呢?這就是我想解決的問題,我把所有常用的算法技巧都集合起來,給你整理出一份「算法小抄」,就可以幫你在做題的過程中有一個方向性的指導。

下次遇到數組相關的題目時,你把我總結的數組相關的技巧都拿出來,一個個試,形成一套固定的做題方法,那遇到新的算法題,不就來者不懼了嗎?

2、對於遞歸的理解不透徹

遞歸思維是經典的計算機思維,如果掌握不好,很多時候你去看別人的題解代碼可能都看不懂,這就很打擊人的自信,覺得自己好菜。

不用氣餒,遞歸確實不好理解,因為它是「計算機思維」嘛,你是個人,又不是個計算機,當然不容易理解了。

要掌握遞歸,關鍵要跳出細節,培養框架思維,嘗試從整體上理解算法的過程。

以我的刷題經驗,初學者最好從「樹」相關的問題開始刷題,為此我特意寫了 手把手刷二叉樹(綱領篇),幫你從二叉樹的視角理解各種復雜的算法。

另外, 我的刷題插件 中也集成了 手把手刷題二叉樹題目 的功能,幫助大家培養框架思維。

別不信,到后面你會發現遞歸代碼反而是最簡單,最容易理解的。

你能在這里學到什么

我的讀者可以大致分兩類:一類對算法完全沒有興趣,屬於面向筆試學習算法的讀者;另一類是對算法感興趣,能夠享受純粹求知樂趣的讀者。

我個人屬於后者,自然希望后者多一些,但畢竟人各有志,兩種讀者沒有對錯之分,而且人總是會變的,說不定學着學着就改變想法了呢?這也未可知。

當然,我的文章能夠同時滿足這兩者的需求:

首先,我會結合自己的刷題經驗,有所取舍,忽略性價比不高的算法技巧,抽象出常用算法的框架,幫助大家高效掌握算法,搞定面試筆試。

另外,我也會清晰地描述自己的解題過程,闡述算法的底層原理,幫助大家培養框架思維以及舉一反三的能力,力求讓大家真正愛上算法,每天不刷兩道題都難受的那種。

所以,不管你是剛剛入門算法的小白,還是已經對算法有所小成,希望進階,我相信這些內容都會對你有幫助。

最后,公眾號后台回復「進群」可加入算法群,大家一起刷題,從現在開始,養成刷題的好習慣:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM