學(xué)習(xí)算法累澡,不要一上來就開始啃《算法導(dǎo)論》愧哟,畢竟這本書并不適合新手學(xué)習(xí)蕊梧,如果你之前的算法基礎(chǔ)比較薄弱肥矢,只會(huì)一直陷在“拿起來又放下”的循環(huán)里∈可以怎么入門呢疟羹?建議還是看書+實(shí)戰(zhàn)参淫,實(shí)戰(zhàn)當(dāng)然也不是說要去干ACM或者是topcoder什么的涎才。
如何學(xué)習(xí)算法?
算法棕兼,其實(shí)可以分為三種伴挚。算法、面試算法田弥、競賽算法偷厦。
算法
也就是算法本身沈自,推薦一些書籍枯途。
1.入門系列:
《算法圖解》:“像小說一樣有趣的算法入門書”榴啸,主打“圖解”鸥印,通俗易懂
《大話數(shù)據(jù)結(jié)構(gòu)》:把理論講得有趣不枯燥狂鞋;每個(gè)數(shù)據(jù)結(jié)構(gòu)和算法骚揍,作者都結(jié)合了生活中的例子信不,能讓你有非常直觀的感受。
2.教科書系列:
《數(shù)據(jù)結(jié)構(gòu)與算法分析》:很多大學(xué)都拿它當(dāng)作教材,非常系統(tǒng)歇由、全面糊昙、嚴(yán)謹(jǐn),適合掌握了至少一門編程語言的同學(xué)没咙。作者也很貼心,這本書有三種語言的版本:《數(shù)據(jù)結(jié)構(gòu)與算法分析 : C 語言描述》《數(shù)據(jù)結(jié)構(gòu)與算法分析 : C++ 描述》《數(shù)據(jù)結(jié)構(gòu)與算法分析 : Java 語言描述》涡驮。
3.進(jìn)階之旅:
《算法導(dǎo)論》:有了一定基礎(chǔ)之后,就可以開始啃這本大部頭了棒口。
4.擴(kuò)展閱讀:
《算法之美》:算法科普剥懒,從生活中的各種問題說起:租房初橘、談戀愛、老虎機(jī)夜只、拍電影、面試旅挤、買彩票、各種排序柒瓣、找停車位、尋找新藥傍药、臨床試驗(yàn)、奧巴馬拉贊助薛训、預(yù)估電影票房等等闸英,非常生活化,可以作為補(bǔ)充閱讀辙喂。《算法帝國》:同樣是科普類書籍,并無涉及算法的原理與實(shí)現(xiàn)細(xì)節(jié)亲族,也可以作為補(bǔ)充閱讀帘靡。
5.殿堂級(jí)
《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》:包含很多卷炼鞠,深度赃阀、廣度观游、系統(tǒng)性、全面性是其他所有數(shù)據(jù)結(jié)構(gòu)和算法書籍都所無法相比聋丝。可以當(dāng)做一種挑戰(zhàn)~
競賽算法
算法學(xué)習(xí)最好由淺入深,先了解算法思維火惊,再去理解實(shí)際應(yīng)用宴倍;當(dāng)逐步全面的掌握相關(guān)知識(shí)體系俗他,有一定實(shí)踐經(jīng)驗(yàn)后,可以去參加一些競賽提升自己的算法能力羡亩。競賽算法是比較鍛煉人的吉殃,對(duì)于競賽來說瓦灶,每道題對(duì)輸入?yún)?shù)和樣本量的要求都非常明確,包括對(duì)空間的限制和運(yùn)行時(shí)間的限制也規(guī)定的非常明確家卖。
每一個(gè)競賽選手都非常熟練怎么根據(jù)這些提前給好的限制,反推出自己需要實(shí)現(xiàn)一個(gè)什么樣復(fù)雜度的解法才能通過叁征。所以對(duì)思維和邏輯上的鍛煉是非常有效的永罚。
一些比較常見的經(jīng)典算法題目:
——數(shù)學(xué)
尾部的零
斐波納契數(shù)列
x的平方根
x的平方根 2
大整數(shù)乘法
骰子求和
最多有多少個(gè)點(diǎn)在一條直線上
超級(jí)丑數(shù)
——特位操作
將整數(shù)A轉(zhuǎn)換為B更新二進(jìn)制位
二進(jìn)制表示
O(1)時(shí)間檢測2的冪次
二進(jìn)制中有多少個(gè)1
——?jiǎng)討B(tài)規(guī)劃
編輯距離正則表達(dá)式匹配
交叉字符串
乘積最大子序列
二叉樹中的最大路徑和
不同的路徑
通配符匹配
——堆
滑動(dòng)窗口的中位數(shù)數(shù)據(jù)流中位數(shù)
最高頻的K個(gè)單詞
接雨水
堆化
排序矩陣中的從小到大第k個(gè)數(shù)
——二叉樹
二叉樹中序遍歷二叉樹的序列化和反序列化
子樹
最近公共祖先
二叉樹的層次遍歷
將二叉樹拆成鏈表
在二叉查找樹中插入節(jié)點(diǎn)
——二分法
經(jīng)典二分查找問題二分查找
兩數(shù)組的交
區(qū)間最小數(shù)
尋找旋轉(zhuǎn)排序數(shù)組中的最小值
搜索排序區(qū)間
尋找峰值
——分治法
快速冪兩個(gè)排序數(shù)組的中位數(shù)
合并K個(gè)排序鏈表
——哈希表
變形詞子串哈希函數(shù)
短網(wǎng)址
復(fù)制帶隨機(jī)指針的鏈表
最小子串覆蓋
——矩陣
搜索二維矩陣旋轉(zhuǎn)圖像
島嶼的個(gè)數(shù)
螺旋矩陣
——寬度優(yōu)先搜索
克隆圖被圍繞的區(qū)域
拓?fù)渑判?/p>
單詞接龍
——鏈表
實(shí)現(xiàn)一個(gè)鏈表的反轉(zhuǎn)鏈表求和 II
刪除鏈表中的元素
LRU緩存策略
合并兩個(gè)排序鏈表
兩個(gè)鏈表的交叉
翻轉(zhuǎn)鏈表 II
復(fù)制帶隨機(jī)指針的鏈表
帶環(huán)鏈表
——枚舉法
統(tǒng)計(jì)數(shù)字名人確認(rèn)
最長連續(xù)上升子序列
最大子數(shù)組差
最長公共前綴
——排序
快排擺動(dòng)排序
最大間距
最接近零的子數(shù)組和
最大數(shù)
四數(shù)之和
數(shù)組劃分
第K大元素
排顏色
——深度優(yōu)先搜索
N皇后問題圖是否是樹
帶重復(fù)元素的排列
分割回文串
——數(shù)組
數(shù)組劃分逆序?qū)?/p>
合并區(qū)間
搜索旋轉(zhuǎn)排序數(shù)組
最大子數(shù)組
刪除排序數(shù)組中的重復(fù)數(shù)字
第二大的數(shù)組
先遞增后遞減數(shù)組中的最大值
兩數(shù)和 - 輸入的數(shù)據(jù)是有序的
兩個(gè)排序數(shù)組的中位數(shù)
在大數(shù)組中查找
顏色分類
合并排序數(shù)組
無序數(shù)組K小元素
中位數(shù)
奇偶分割數(shù)組
——貪心
主元素尋找缺失的數(shù)
買賣股票最佳時(shí)機(jī)
加油站
刪除數(shù)字
落單的數(shù)
最大子數(shù)組差
——線段樹
線段樹查詢線段樹的構(gòu)造
線段樹的修改
區(qū)間求和
統(tǒng)計(jì)比給定整數(shù)小的數(shù)的個(gè)數(shù)
——棧
帶最小值操作的棧用棧實(shí)現(xiàn)隊(duì)列
有效的括號(hào)序列
簡化路徑
——整數(shù)
反轉(zhuǎn)整數(shù)將整數(shù)A轉(zhuǎn)換為B
整數(shù)排序
——字符串處理
羅馬數(shù)字轉(zhuǎn)整數(shù)回文數(shù)
亂序字符串
有效回文串
翻轉(zhuǎn)字符串
最長無重復(fù)字符的子串
字符串壓縮
比較字符串編輯距離II
作者:九章算法
鏈接:https://www.zhihu.com/question/19981544/answer/747832788
來源:知乎