新書出版已經有一段時間了,也陸續收到了一些讀者的反饋。今天我們就回答一些讀者常見的問題以及《演算法通關之路》一些內容劇透。
其實出版後已經有不少讀者看完了並且給了非常優質的讀後感。下面我挑選幾個章節的優質留言給大家。
讀者留言
- 第 6 章二分法,雖然二分法是一個比較經典的演算法,但對於大部分人一直是個頭痛的問題。我每次刷 LeetCode 的時候,常常看不出來要使用二分法,或者知道要用二分法,但花了很長的時間在除錯二分法的邊界問題。通過學習此章很大程度上解決了我的煩惱,讓我對二分法有了全方面的瞭解。它從二分法的經典問題開始講起,再到後面的二分法的變種問題。其中詳細介紹了什麼時候用二分法,以及編寫二分法的過程中所需要注意的邊界問題。如果你也對二分法感到煩惱,十分推薦你閱讀它,相信可以從這一章節學習到二分法的精髓。
- 第 7 章位運算,與很多經典演算法相比位運算的演算法普適性並不高,很多程式設計師對此並不熟悉,這一章節由一位音視訊架構師主筆,音視訊的處理裡,充斥著大量對二進位制資料的處理。聽他的說法,每次看到位運算的問題,都有親切的感覺,讓人忍不住想看一看他的見解。人們習慣了使用十進位制的計算規則,但如果能夠有二進位制的思維,能夠將資料二進位制話,然後運用位運算進行處理,一定能開啟新的思路。
- 非常喜歡第 8 章設計這一章節,讓我更深入的瞭解了高階資料結構的設計。從我入行開始,在經歷的面試當中,演算法(algos)和系統設計(system design) 基本是必考的兩個方向,尤其是在面北美、歐洲的公司的時候。而且這兩年發現,國內的巨頭也開始使用演算法題和系統設計題來作為面試的內容。對於要做“卷中王者”的我們來講,這是必須要掌握的知識。這一章由淺入深地講解了常見的幾種高階資料結構。個人尤其喜歡對於 LRU、LFU 和 跳錶的講解,一步步讓你去了解設計的緣由和取捨。其中的每個知識點,既可以出在演算法的面試題裡面,也可以作為 system design 的基礎考點。另外值得一說的是,這一章節的時間複雜度的推理非常縝密,並且在延展部分給出了相關領域的論文。總而言之,很值得一看。
- 雙指標和滑動視窗在 LeetCode 中是兩個 tag,但本質上可以將滑動視窗看做雙指標的特殊應用。本質上,可以將雙指標看做對陣列、連結串列、字串的兩個索引,依照這個思路,甚至可以出現多個索引的情況。而滑動視窗是利用兩個索引,來完成兩索引內的一系列操作。考慮到視窗的大小是否固定、視窗的起始位置等,可以對這類問題進行很多優化。本書的這兩節,也都給出了不同的解題思路。非常推薦研究一下里面的題目。
- 說說公認最難的動態規劃題目,這本書中不僅有專門的章節帶你循序漸進的學習,還通過遊戲、博弈和股票系列專題帶你鞏固基礎,觸類旁通。一直懵懵懂懂關於動態規劃與其他幾種演算法思想的異同和關聯,通過讀完此書獲得了不少答案。
- 在刷 leetcode 當中,以 分治法 作為 tag 的題目並不多,並且總和 dp、dfs 等演算法知識混起來,增加理解難度。非常喜歡這本書對於分治的講解,尤其是開頭總結了在筆試、面試中可能面臨的大部分分治型別題目,替我省了很多的精力。比如對於“合併 k 個排序列表”的題目,一步步從暴力法到最優解法,學習坡度變得平緩,而不是難度的陡增,非常推薦一觀。
- 貪心法是一個最讓我摸不著頭腦的演算法,每道題的題解都相差較大,很難找到一個共性的東西。
- 第十五章講解了很多常見的貪心策略,例如問題拆解,限制條件等等,這些貪心策略讓我面對貪心題目有了更加清晰的思路,以及更多的選擇方向。此外,章節末尾還有對解題技巧的總結,這些技巧比較精煉,啟發了我以後如何提高貪心題目的解題能力,非常貼心,推薦大家好好閱讀這一章節。
- 相比於其它演算法,回溯法的演算法思想比較固定,但怎麼理解回溯法,快速應用回溯法是一個較大的難點。第十六章開篇就詳細介紹了回溯法的解題模板,並在一道經典的組合問題上應用,讓我對回溯法有了很直觀的理解。同時,後文還講解了不同背景下回溯法的應用題目,在提高應用模板能力的同時,學習到各種場景下的回溯技巧,相信能夠在以後更加靈活地應用回溯模板,推薦大家閱讀。
- 第十八章是我比較喜歡的一個章節,它總結了常見的解題模板,幫助我快速地學習各種套路,加深解題模板的理解。這些解題模板可以作為複習的材料,在面試或者筆試前重新理順套路題目的思路。同時,解題模板來自於前面章節的內容,個人認為可以遮住程式碼,嘗試根據套路背景自己編寫程式碼,以此檢驗前面內容是否掌握。
非常感謝大家的認可,也希望大家拿到自己滿意的 offer!
最後來回答幾個讀者感興趣的問題。
1. 需要按照順序看麼?
完全不需要。實際上,我也非常建議大家跳著看。優先看自己正在學習的內容。
比如你正在學習動態規劃,可以直接看動態規劃章節,股票章節以及遊戲章節。比如你對複雜度分析不太懂就可以先看第一章。
我做了一個”腦圖“給大家快速預覽書的主要內容。如果大家實在不知道閱讀順序,推薦用這個腦圖中的順序從上到下看。
2. 我已經看了你的 Github 了,還需要這本書麼?
不管你是看了我的 Github(地址:https://github.com/azl3979858...),還是參加了我的 《91 天學演算法》活動。我都強烈建議你購買一本。
原因有三:
- 雖然知識點還是那麼多,幾乎沒有新增知識點。但是相同的主題,書的講述方式和風格完全不同。書內容更加嚴謹,搭配 Github 和《91 天學演算法》講義進行學習效果更好。
比如書中二分章節中《153. 尋找旋轉排序陣列中的最小值》,這道題是一個很簡單的二分。但是在證明覆雜度的時候就使用了兩種方法來證明。
這種嚴謹的態度貫穿整本書。通常來說,複雜的時間複雜度我也會給出分析,而不是直接貼出一個答案給大家。雖然不一定會像這個二分一樣給出多種證明方式,但是也力求完整和準確。
簡單來說,這本書在很大程度上都是和 Github 以及我的其他演算法資料的補充,具體內容需要大家可以買到書後自己翻翻來體會啦。
- 很多題目由於我在書中做了講解,因此就沒有公開到 Github 等資料。因此如果你想看這些題目的題解就要通過書來看。
- 書的程式碼比較全。很多同學反饋想增加 xx 語言,但是確實沒有太多精力增加語言。但是我給這本書所有的題目都增加了三種主流語言的程式碼,包括 Python,CPP 和 Java,另外部分題目也提供了 JS 版本。
最後強烈建議大家搭配《演算法通關之路》來學習,尤其是那些參加《91 天學演算法》的同學。
哦,對了!《91 天學演算法》每個月都會在堅持每天打卡的人中抽取 3 人免費獲取我們的《演算法通關之路》!
《如何參加 91 天學演算法(第五期)?》 https://lucifer.ren/blog/2021...
3. 有試讀版麼?
有的。https://leetcode-solution.cn/...
這裡有:
- amazon 官方提供的複雜度分析的部分試讀
- 西法提供的設計章節的部分試讀。
大家趕緊點 ta,感受書的全面和嚴謹吧~ (_^▽^_)
4. 有購書活動嗎?
西法打算增加一個活動。
規則是凡在活動期間購買《演算法通關之路》並好評的同學截圖給我,驗證後可以免費參加當前一期《91 天學演算法》。
注意只能免費參加購書時間當前一期哦,比如你是在第五期之後第六期結束前購買的,那就只能免費參加第六期的。
不過由於這一期已經開始了,現在搞這個活動會損害一部分已經參加了 91 活動並且買了我的書的朋友,因此西法打算下期再開啟這個活動。
下期什麼時候?大約在冬季(12 月份)
勘誤
首先,一些讀者很熱心地給我反應印刷錯誤。比如複雜度分析部分單調棧的程式碼是錯誤的,少個部分程式碼,應該是印刷問題,之前校驗 word 的時候沒有這個問題。大家可以訪問官方網站的配套程式碼檢視正確的程式碼。
官方網站地址:https://leetcode-solution.cn/...
如果大家發現其他問題也可以反饋到我這裡,或者直接在讀者交流群眾反饋。