學習算法,不要一上來就開始啃《算法導論》,畢竟這本書并不適合新手學習,如果你之前的算法基礎比較薄弱,只會一直陷在“拿起來又放下”的循環里。可以怎么入門呢?建議還是看書+實戰,實戰當然也不是說要去肝ACM或者是topcoder什么的。

如何學習算法?

算法,其實可以分為三種。算法、面試算法、競賽算法。

算法

也就是算法本身,推薦一些書籍。

1.入門系列:

《算法圖解》:“像小說一樣有趣的算法入門書”,主打“圖解”,通俗易懂

《大話數據結構》:把理論講得有趣不枯燥;每個數據結構和算法,作者都結合了生活中的例子,能讓你有非常直觀的感受。

2.教科書系列:

《數據結構與算法分析》:很多大學都拿它當作教材,非常系統、全面、嚴謹,適合掌握了至少一門編程語言的同學。作者也很貼心,這本書有三種語言的版本:《數據結構與算法分析 : C 語言描述》《數據結構與算法分析 : C++ 描述》《數據結構與算法分析 : Java 語言描述》。

3.進階之旅:

《算法導論》:有了一定基礎之后,就可以開始啃這本大部頭了。

4.擴展閱讀:

《算法之美》:算法科普,從生活中的各種問題說起:租房、談戀愛、老虎機、拍電影、面試、買彩票、各種排序、找停車位、尋找新藥、臨床試驗、奧巴馬拉贊助、預估電影票房等等,非常生活化,可以作為補充閱讀。《算法帝國》:同樣是科普類書籍,并無涉及算法的原理與實現細節,也可以作為補充閱讀。

5.殿堂級

《計算機程序設計藝術》:包含很多卷,深度、廣度、系統性、全面性是其他所有數據結構和算法書籍都所無法相比。可以當做一種挑戰~

競賽算法

算法學習最好由淺入深,先了解算法思維,再去理解實際應用;當逐步全面的掌握相關知識體系,有一定實踐經驗后,可以去參加一些競賽提升自己的算法能力。競賽算法是比較鍛煉人的,對于競賽來說,每道題對輸入參數和樣本量的要求都非常明確,包括對空間的限制和運行時間的限制也規定的非常明確。

每一個競賽選手都非常熟練怎么根據這些提前給好的限制,反推出自己需要實現一個什么樣復雜度的解法才能通過。所以對思維和邏輯上的鍛煉是非常有效的。

一些比較常見的經典算法題目:

數學

尾部的零

斐波納契數列

x的平方根

x的平方根 2

大整數乘法

骰子求和

最多有多少個點在一條直線上

超級丑數

比特位操作

將整數A轉換為B更新二進制位

二進制表示

O(1)時間檢測2的冪次

二進制中有多少個1

動態規劃

編輯距離正則表達式匹配

交叉字符串

乘積最大子序列

二叉樹中的最大路徑和

不同的路徑

通配符匹配

滑動窗口的中位數數據流中位數

最高頻的K個單詞

接雨水

堆化

排序矩陣中的從小到大第k個數

二叉樹

二叉樹中序遍歷二叉樹的序列化和反序列化

子樹

最近公共祖先

二叉樹的層次遍歷

將二叉樹拆成鏈表

在二叉查找樹中插入節點

二分法

經典二分查找問題二分查找

兩數組的交

區間最小數

尋找旋轉排序數組中的最小值

搜索排序區間

尋找峰值

分治法

快速冪兩個排序數組的中位數

合并K個排序鏈表

哈希表

變形詞子串哈希函數

短網址

復制帶隨機指針的鏈表

最小子串覆蓋

矩陣

搜索二維矩陣旋轉圖像

島嶼的個數

螺旋矩陣

寬度優先搜索

克隆圖被圍繞的區域

拓撲排序

單詞接龍

鏈表

實現一個鏈表的反轉鏈表求和 II

刪除鏈表中的元素

LRU緩存策略

合并兩個排序鏈表

兩個鏈表的交叉

翻轉鏈表 II

復制帶隨機指針的鏈表

帶環鏈表

枚舉法

統計數字名人確認

最長連續上升子序列

最大子數組差

最長公共前綴

排序

快排擺動排序

最大間距

最接近零的子數組和

最大數

四數之和

數組劃分

第K大元素

排顏色

深度優先搜索

N皇后問題圖是否是樹

帶重復元素的排列

分割回文串

數組

數組劃分逆序對

合并區間

搜索旋轉排序數組

最大子數組

刪除排序數組中的重復數字

第二大的數組

先遞增后遞減數組中的最大值

兩數和 - 輸入的數據是有序的

兩個排序數組的中位數

在大數組中查找

顏色分類

合并排序數組

無序數組K小元素

中位數

奇偶分割數組

貪心

主元素尋找缺失的數

買賣股票最佳時機

加油站

刪除數字

落單的數

最大子數組差

線段樹

線段樹查詢線段樹的構造

線段樹的修改

區間求和

統計比給定整數小的數的個數

帶最小值操作的棧用棧實現隊列

有效的括號序列

簡化路徑

整數

反轉整數將整數A轉換為B

整數排序

字符串處理

羅馬數字轉整數回文數

亂序字符串

有效回文串

翻轉字符串

最長無重復字符的子串

字符串壓縮

比較字符串編輯距離II


作者:九章算法

鏈接:https://www.zhihu.com/question/19981544/answer/747832788

來源:知乎