一塊兒玩轉算法面試,保姆級攻略(附高清無碼算法總結導圖),建議收藏

本文已收錄至啓艦的電子書《逆天改命—程序員的成神之路》,github地址:github.com/harvic/Figh… 歡迎star。點擊【閱讀原文】也可直達。php

我大學時候也很傻,爲了校招,看了不下於五本算法書,加上LeetCode,刷了大半年。html

總共一兩千道題啊……不刷怕考到……忘了刷,刷了忘……毛都快掉沒了……git

如今工做近十年,展轉幾個大廠,由當年的應試者變成了出題人,才知道,徹底沒必要這麼辛苦。程序員

任何事情都遵循28原則,咱們只要把握住那20%,就能拿到80分!github

凡事都講究性價比!面試

省下來的時間,談個女友,它不香麼???!!!算法

這裏把我這些年的出題經驗告訴你們,但願你們知道哪些是重點,應該怎麼學數據結構和算法。編程

直接上乾貨,我花了兩天的時間作了一張圖,涵蓋數據結構和算法書籍中都會講到的知識點。並給出了經常使用算法的平均時間複雜度,對於必需要學的內容前面加了星標設計模式

這裏面涉及到了近二十種數據結構:數組、鏈表、棧、隊列、散列表、二叉樹、堆、跳錶、圖、Trie 樹;超四十種常見算法思想:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分治算法、回溯算法、動態規劃、字符串匹配算法。數組

掌握了這些基礎的數據結構和算法,再學更加複雜的數據結構和算法,就會很是容易、很是快。

算法導圖及推薦學習資料

長文預警,如下內容涵蓋了十幾年來學習算法的心得,總結出來供你們參考。

文章寫了好久,我相信它必定能幫到你,也但願你們能給我個贊,以示鼓勵,謝謝

目錄:

  1. 數據結構與算法的區別

  2. 數據結構怎麼學

  3. 怎麼學習算法

  4. 算法太難懂?那是你不知道這些模擬網站

1、數據結構與算法的區別

不少同窗搞不明白,數據結構與算法有什麼區別,甚至有些同窗覺得數據結構中就包含了算法。

其實,是字面意思就能知道個大概,數據結構主要講解數據的組織形式,換句話說,我就是咱們要怎樣把這些數據存儲起來,因此有列表、堆、棧、樹、圖,這是數據結構的重點。

算法,則注重的是思想,好比列表裏的元素怎麼排序、怎麼在當前的存儲結構中找到最大的數和最小的數?等等,說白了就是解決現實中問題的思想。因此纔會有分治思想、貪心思想、動態規劃這些經典算法。

2、數據結構怎麼學

關於數據結構,我想說的是,它是這四大件中最簡單、最基礎的一個。離開了數據結構,幾乎任何的程序都會失效,因此在討論數據結構的時候,經常要把算法也連帶着說一說。

要單純地掌握常見的數據結構,就如同拆解一個個精妙的儀器件同樣有趣和簡單。正由於數據結構這個東西在程序中的做用,和儀器部件特別相像,不一樣的數據結構有着不一樣的特性,所以要想學好數據結構,圖解是必備武器!

這裏強推中國大學上,浙江大學的開設的《數據結構》課程,涵蓋了經常使用的數據結構和算法。

www.icourse163.org/course/ZJU-…

輔以教材參考書,強推《大話數據結構》,光看封面你就知道這本書的風格了

沒錯,這就是大名鼎鼎的《大話設計模式》的做者出的,絕對頂。

3、怎麼學習算法

算法課經常和數據結構課放在一塊兒,在有些高校中,會存在「數據結構與算法」和「算法設計與分析」這樣的兩門課。

學習算法的套路很簡單,多看、多寫、多上機,既然是思想的集合,看得多了,天然無師自通。

至於刷題,不少同窗都知道要刷LeetCode。

LeetCode題庫:(2123題)

leetcode-cn.com/problemset/…

總共兩千多道題,並且有些題,很是難,就算天天10題,也至少刷半年。這顯然不適合絕大部分同窗。

因此,咱們要找到最核心、最重要的題集,便可

好比,若是時間緊張,能夠先刷《程序員面試寶典》裏的題目,總共109題。

leetcode-cn.com/problem-lis…

刷完之後,有時候,能夠再刷《劍指offer》的題目,共75題。

leetcode-cn.com/problem-lis…

由於這兩本書,都是面向面試的高頻題彙總,天然有不少題目是重合的。這也正能說明這兩本書的重要性。

若是專攻面試的話,還有兩本不錯的書推薦:

《編程珠璣》這本書的豆瓣評分很是高,有 9 分。

這本書最大的特點就是講了不少針對海量數據的處理技巧。這個多是其餘算法書籍不多涉及的。面試的時候,海量數據處理的問題也是常常會問的,特別是校招面試。無論是開拓眼界,仍是應付面試,這本書都很值得一看。

《編程之美》這本書有多位做者,其中絕大部分是微軟的工程師,因此書的質量頗有保證。不過,這裏面的算法題目稍微有點難,也不是很系統,這也是我把它歸到面試這一部分的緣由。若是你有必定基礎,也喜歡鑽研些算法問題,或者要面試 Google、Facebook 這樣的公司,能夠拿這本書裏的題,先來自測一下。

固然,我也有一本谷歌師兄總結的高頻面試算法習題集,包含了常見的數據結構和算法彙總,不管是排版仍是內容,都是很是棒。

全部這些書和開篇的思惟導圖,我都爲你們準備好了,須要的小夥伴能夠到備用號上直接領取。

算法導圖及推薦學習資料下載

4、算法太難懂?那是你不知道有這些模擬網站

算法的難點在於,根本沒辦法在腦子裏抽象出它的步驟啊

對於作個幾何題都費勁的男孩子來講,那更是要了他的親命了。

今天,我就給你們推薦幾個算法可視化的網站。

沒錯,就是寫了代碼之後,能夠看見他們是怎麼一步步求出結果的。

一、visualgo.net/en

目前網站支持中文,印尼文,日文等多語言版本。

最關鍵的是,它幾乎包含了全部算法!!!!

在搜索選項中你能夠根據關鍵詞查找到你想要的算法。

點進去一個具體的算法以後,會有兩種方式的可視化呈現方式,一種是電子講座模式,一種是示例模式。其中示例模式是以動畫方式呈現,你能夠控制動畫的快進與倒退,電子講座模式是以知識點講解模式呈現,你能夠手動控制頁面的進度。兩種方式均可以幫助你演示每一個步驟的過程代碼。

接下來咱們演示一下冒泡排序的執行過程,以下圖所示:

另外,你還能夠建立一組自定義的數,而後讓動畫顯示「你的算法」。

除此以外,還支持在線測試喲~

二、algorithm-visualizer.org/Algorithm

在Algorithm Visualizer,你們能夠很清楚的看到算法運行的整個過程,很直觀,便於你們學習。

你們能夠很清楚的看到,網站分爲三部分,最左邊是算法目錄,你們能夠選擇本身感興趣的算法,目前已經包括了不少算法了,好比二叉樹、圖、排序算法、動態規劃等等經典算法 。中間區域主要是算法演示以及運行log。右側是代碼以及算法運行按鈕。

咱們用它來演示一下冒泡排序的執行過程,以下圖所示:

同時它是開源的,目前有35K個star,足以可見該項目的歡迎程度,這裏推薦給要學習算法的各位。

github.com/algorithm-v…

三、www.cs.usfca.edu/~galles/vis…

目前已經有不少經常使用的數據結構與算法的可視化,如:常見的數組、鏈表、隊列、二叉搜索樹、紅黑樹、各類排序等,以下圖所示:

好比,咱們用它來模擬一個二叉搜索樹,以下圖所示:

咱們再用它來演示一下快速排序算法,以下圖所示:

5、提高上機能力,還得靠Online Judge系統

如今校招都是在線考試,都會要求直接寫可運行的代碼。

有些同窗正是沒有上機經驗,連怎麼提交都不懂。更別說如何使本身設計的程序符合各類預先設定好的測試用例了。而能經過多久測試用例,倒是能得多少分的關鍵。

因此,提早能先用考試用的上機系統演練下,找下感受是很是有必要的。

如今已經有不少開放的判題系統了,這裏爲你們收集了幾十不一樣類型的OJ網址,你們有機會的話,能夠看看。

一、本人強推的幾個

北京大學POJ poj.org/

中國最受歡迎OJ之一,各式各樣各類難度的題目都有。

杭州電子科技大學HDUOJ acm.hdu.edu.cn/

中國最受歡迎OJ之一,題目數量多,來源廣。

UVA uva.onlinejudge.org/

全球最大最老牌的OJ之一,題目數量堪稱之最。瀏覽須要FQ。

codeVs codevs.com/

當今最大中文OJ之一,它的天梯功能可讓選手按照難易程度練習各類算法。codevs也是我最先接觸到的OJ,題庫豐富,難度適中,能夠無條件 查看當前出錯點的答案。據悉網站管理員WPH95之後想把CODEVS向AI等方面擴寬發展。具體怎樣不得而知,不過它做爲OJ的強大行仍是毋庸置疑的。

洛谷 www.luogu.org/

OJ上的後起新秀,迅速佔有了很大的OJ評測份額,它的試煉場功能和CODEVS的天梯功能相同,可讓選手按階段作題提升。我的認爲題目難度分類 有些不太恰當,爲什麼同是「普及+提升-」的題目難度差別那麼大呢?支持在線IDE編程。

其代碼公開計劃可讓提交此題並達到60分且同加入代碼公開計劃的 人查看他人的代碼。

大視野在線評測BZOJ www.lydsy.com/JudgeOnline…

題目難度多爲省選級及以上,但有一部分題目須要購買權限才能訪問。

UOJ uoj.ac/

舉辦NOIP難度的UER和省選難度的UR。賽題質量極高,命題人大多爲現役集訓隊選手。

清橙評測tsinsen www.tsinsen.com/

集訓隊做業網站。近幾年的內容尚未公開。

ACdream acdream.info/

二、學院型OJ

湖南師大附中 vijos vijos.org/

學軍中學OJ www.hzxjhs.com:83/

河南實驗中學OJcojs.tk/cogs/index.…

南陽理工學院OJacm.nyist.net/JudgeOnline…

北大在線評測openjudge.cn/

好像是許多大學創辦比賽提交做業的場所。隨着2015年NOI網站公佈了NOIP考試將從本網站的NOI題庫小組抽取題目後,詳細這個網站會迎來不少OIERS的訪問。

八一中學碼酷www.marcool.net/home/index.… 浙江大學ZOJ acm.zju.edu.cn/onlinejudge…

西南科技大學SWUST OJ acm.swust.edu.cn/

(只供校內學生註冊)

建蘭中學OJschool.jloj.cn/oj-plus/

天津大學OJacm.tju.edu.cn/toj/

TIMUS OJ acm.timus.ru/

南開大學OJacm.nankai.edu.cn/

華中科技大學OJacm.hust.edu.cn/

齊齊哈爾大學OJwww.smartoj.com/

浙江工業大學OJ

acm.zjut.edu.cn/system/mess…

薩拉托夫州立大學OJacm.sgu.ru/

福州大學acm.fzu.edu.cn/

電子科技大學acm.uestc.edu.cn/#/

上海交大OJacm.sjtu.edu.cn/OnlineJudge…

中科大OJacm.ustc.edu.cn/ustcoj/

寧波工程學院ac.2333.moe/

北京師範大學acm.bnu.edu.cn/v3/

三、自由型OJ

九度OJac.jobdu.com/problemset.…

RQNOJ www.rqnoj.cn/

RQNOJ,是國內OJ(信息學在線測評)開放平臺開發和運行的先導

tyvj tyvj.cn/

主要面向信息學競賽,09年成立,如今好像在清北學堂的手中。(話說那大犇出沒神馬的咱們去北京清北的時候掛上去的,如今竟然還沒撤下來)

四、比賽類OJ/社區型OJ/其餘的國外OJ

cf codeforces.com/

Codeforces是一家爲計算機編程愛好者提供在線評測系統的俄羅斯網站。該網站由薩拉托夫國立大學的一個團體創立並負責運營。 tc www.topcoder.com/tc

topcoder社區獲得了數百萬編碼者的支持,所以你能夠了解到不少挑戰性的項目,基於此你還能夠爲本身賺去額外的報酬。你能夠天天或每週參與編碼挑戰,該社區提供的項目極具備挑戰性,對於初學者而言有必定的難度,但卻值得一試。

cc www.codechef.com/

CodeChef由Directi建立的一個開發者社區,爲開發者提供實踐、競賽和進步的平臺。該社區擁有大量的編碼競賽問題,容許訪問此前別人解答編碼挑戰賽的源碼。該社區也設置了難易度,你能夠根據自身條件選擇挑戰。

Bestcoder

bestcoder.acmcoder.com/

克羅地亞coci

hsin.hr/coci/

波蘭MAIN

main.edu.pl/en

波蘭SPOJ

www.spoj.com/

日本JOI

www.ioi-jp.org/index.html

LIGHTOJ www.lightoj.com/login_main.…

AOJ judge.u-aizu.ac.jp/onlinejudge…

五、挑戰型OJ

歐拉計劃PE projecteuler.net/ Project Euler多是全球最流行的編程挑戰網站,項目推出初期就擁有幾十萬的用戶,足以代表其影響力有多大。Project Euler致力於鼓勵、挑戰而且發展解題技巧,併爲那些對迷人的數學世界有興趣的人提供樂趣。

leetcode.com/

leetcode 是一個美國的在線編程網站,上面主要收集了各大IT公司的筆試面試題,對於應屆畢業生找工做是一個不可多得的好幫手。

這個網站的的好處在於它會告訴你測試數據以及你的輸出和正確的輸出是什麼,方便你們調試學習。目前,只支持C++和Java兩種語言。

www.hackerrank.com/

HackerRank網站是爲編碼程序員們提供一個以編碼謎題和現實生活中遇到的編碼難題爲基礎的新興的社交平臺。HackerRank公司獲得了風險投資公司Y Combinator 的資金支持。

在這個社區中,他們提供了各類編碼謎題、遊戲病毒和現實中的編碼難題及挑戰,讓黑客們在該社區中進行交流討論,接受挑戰。HackerRank就如這個名字所暗示的同樣,它同時還提供了在線排行榜和其餘的競爭元素。

六、學習型OJ

萌碼oj.mengma.com/

計蒜客www.jisuanke.com/

內容看起來不少,其實也只是推薦了幾本書和一套視頻罷了,所列出的這些網站,都只是輔助學習用的。

把這些內容學會,算法應該說是很是牢固了,不管是校招仍是工做,都已經很是夠用了。

好了,這篇文章就到這了,但願你們都能如願學會算法。

我是啓艦,不要讓將來的你,討厭如今的本身,一塊兒加油。

幫我點個贊吧,謝謝。

相關文章
相關標籤/搜索