當前位置: 華文問答 > 科學

學習演算法先看演算法書還是先刷題?

2014-10-22科學

好家夥,上來就啃【 演算法導論 】這種大黑書。。。。

年輕人,你這麽渴望力量嗎?(文末有我總結的力扣重點演算法題目)

再渴望力量也要按部就班一步一步慢慢進步的啊,哪有一口吃成個胖子的道理。

先說結論:

不要直接上來就看書!

不要直接上來就看書!

不要直接上來就看書!

重要的事情說三遍!

電腦編程知識全靠自學,校招時順利拿下百度、華為、字節跳動等offer,現在也在字節跳動寫程式碼。

我當初在學習演算法的時候,沒有直接上來就啃書,而是選擇了一種對小白比較友好的方式:先去看影片,再去刷題在實戰中成長!

上幹貨!

特別是第一門王卓老師的課程,非常好!是我在B站上看到最好的演算法類課程之一了!

我在以前的優秀編程類影片推薦中就提到過。

剩下的就是多去實戰中成長和歷練了,我主要使用的是力扣網和牛客網,

對了,如果你也是跟我以前一樣,現在還在學校裏讀書,並且是打算在畢業後直接參加工作的話, 那麽不妨看看下面這些已經上岸的一些學長學姐是如何上岸 互聯網一線大廠如騰訊、阿裏、字節跳動、美團、百度等公司,目前這份分享已經開源在github上了。

接著給大家分享一下我以前經歷過幾十場面試得出的結論吧。

在正式面試考察中,演算法主要有以下重要知識點:

  • 十大排序演算法的時間復雜度和空間復雜度是多少?最好情況和最壞情況下分別是多少?是否存在可以最佳化的點?
  • 線性結構:線性表和陣列區別?什麽時候該用線性表什麽時候該用普通陣列?
  • 尋找:順序尋找、有序表尋找、二分尋找、差值尋找、斐波那契尋找、線性索引尋找各自的定義和實作?你自己親手寫過嗎?
  • 圖:最短路徑、最小生成樹、拓撲排序、鄰接矩陣/鄰接表
  • 基本演算法:分治、動態規劃、貪心演算法、回溯法、剪枝法、列舉法
  • 樹:二叉尋找樹、平衡尋找樹、多路尋找樹、大小堆、字典樹、並查集,就比如大頂堆和小頂堆的適用情形,是否深入理解過?
  • 復雜度:空間復雜度和時間復雜度該如何計算?for迴圈下的時間復雜度有幾種情形?
  • 對了,這裏推薦一個前段時間我發現的一個適合電腦專業從業人的網站,可以說是 寶藏級網站

    經常看到有人說學習編程找不到合適的資源,那麽你可以在這個網站上找到很多不錯的資源,並且都是分類好的了,都按照類別劃分好了,並且都附贈了 下載地址

  • 程式語言:Java、C++、Golang、Python、前端、其他語言等
  • 電腦基礎:作業系統、電腦網絡、數據結構與演算法、數據庫、設計模式;
  • 電子書籍:開源倉庫、電子書網站等
  • ....
  • 編程資源網

    此外,還有 社招校招 相關資源以及 考研考公 等資源,還是很多的。

    校招社招考研考公的資源

    網址地址:

    相遇即是有緣,我最近發現三位谷歌大神寫演算法刷題資料,支持Java、C++、Go三種語言,其中對於面試中考察較多的連結串列、樹、動態規劃、陣列等知識點講解的都很全!如果你演算法能力比較弱,比如互聯網大廠面試中手撕演算法比較差的話,那要好好看看了。

    BAT大廠必備!支持Java、C++、Go三種語言版本!谷歌大佬親自總結的Leetcode刷題筆記~

    演算法從考察角度來細分,可以分為:

    1、排序搜尋演算法,包括:冒泡、選擇、插入、合並、快排、計數、基數、桶排、堆排、希爾、線性搜尋、二分尋找等。

    2、貪心演算法,包括:最大流量演算法、Dijkstra、Kruskal、Prim、Huffman等。

    3、動態規劃,包括:Floyd、最長公共子序列,回溯、字串匹配演算法。

    排序

    十大排序考察較多的有:插入排序、歸並排序、桶排序、選擇排序、交換排序、計數排序、基數排序

    在我找工作前,我將 劍指offer刷完三遍、LeetCode以76%+正確率刷完400+道題 後,做足了準備後才去找的互聯網招聘,還好最後成功拿到了 字節跳動的研發崗Offer

    我也總結了一些比較常見的互聯網考察題型,以下回答主要來自於我的另一個回答中的總結題型:

    以前在準備秋招的時候刷過大概600多道力扣上的題,2遍的劍指offer,後來又將不少題型進行了二刷三刷,順利了拿到字節跳動的SP offer。

    我不喜歡盲目刷題,所以不會可以刻意一些難題,我主要是為了面試而進行的刷題,現在把自己以前刷過的題目,進行精煉總結一下,對於一些質素不太好以及面試筆試中出現頻率較低的題目被我篩掉了,最後還剩下300多道。

    專欄地址: 精選力扣300+道演算法題

    前言

    本部份所有題目均來自於LeetCode網,並於每道題目下標明具體力扣網原題連結。

    關於更多本專欄的介紹可以點此了解阿秀的 秋招找工作經歷與個人介紹

    本專欄介紹

  • 本專欄是阿秀本人在秋招前的於力扣網的刷題筆記整理總結,是按照如下14個標簽進行刷題的,每個標簽下具體又分為Easy、Medium、Hard三個等級
  • 本專欄適合於校招、社招工作黨以及打算轉行做電腦的非科班人士,適用於互聯網求職筆試、面試而非演算法類競賽比如藍橋杯等
  • 本專欄是我從將近600道演算法題目中精選出300+道而成的,對於一些質素不太好以及面試筆試中出現頻率較低的題目被阿秀篩掉了
  • 說到這裏,分享一下我自己以前準備校招過程中做的一些 學習筆記 ,比如C++、電腦基礎等的筆記分享給你,也正是因為這些筆記的存在才順利拿到的字節跳動SP的offer!

    自己一個字一個字當時跟著影片中做
    阿秀個人在學習C++過程中的筆記連結:https:// pan.baidu.com/s/18XAu8O TsJmX_sfZ1qpmCcw 提取碼:fw8s

    下面是具體分類

    1、陣列

    2、字串

    3、連結串列

    4、數學

    5、哈希表

    6、二分尋找

    7、棧

    8、雙指標

    9、貪心演算法

    10、回溯演算法

    11、動態規劃

    12、深度優先搜尋(DFS)

    13、樹

    在我自己學習電腦的過程中,一直保持著學習,不斷擴充知識面,堅持給自己充電,不至於被倒掛,平時看書的時候會去網上買書,但是那些書太貴了,所以就收集一些電子書來看。

    後來也慢慢的養成了收集書籍的愛好,再加上前段時間從一個電子書網站上收集到很多的電腦經典圖書PDF書籍,網址是這個:https://www. pdf246eook.com ,貌似現在已經停服了。

    不知不覺間我已經收集 超過 1000 本, 嚇了一跳!!

    現在 已經分享在github上 了,這可能是 整個GitHub上最全的電腦經典PDF倉庫 了。

    其中涉及C/C++、Java、Python、Go語言等各種程式語言,還有數據結構與演算法、作業系統、後端架構、電腦系統知識、數據庫、電腦網絡、設計模式、前端、組譯以及校招社招各種面經等~

    這可能是整個GitHub上最全的電腦經典PDF倉庫了。

    地址1: https:// github.com/forthespada/ CS-Books (如果由於網絡等等因素,如果不能存取可以嘗試地址2)

    地址2 : https:// gitee.com/ForthEspada/C S-Books

    其中涉及C/C++、Java、Python、Go語言等各種程式語言,還有數據結構與演算法、作業系統、後端架構、電腦系統知識、數據庫、電腦網絡、設計模式、前端、組譯以及校招社招各種面經等~

    精選力扣300+題目之陣列

  • 414、第三大的數
  • 581. 最短無序連續子陣列 很經典的題目,very nice
  • 605. 種花問題 也是很不錯的題目
  • 628. 三個數的最大乘積
  • 643. 子陣列最大平均數 I
  • 665. 非遞減數列 很好的題
  • 674. 最長連續遞增序列
  • 697. 陣列的度
  • 717. 1位元與2位元字元
  • 724. 尋找陣列的中心索引
  • 747. 至少是其他數碼兩倍的最大數
  • 830. 較大分組的位置
  • 840. 矩陣中的幻方
  • 849. 到最近的人的最大距離 好題
  • 888. 公平的糖果交換
  • 914. 卡牌分組 這也是道好題
  • 941. 有效的山脈陣列
  • 989. 陣列形式的整數加法 經典,很經典的題目,一步步漸進,直到最優解法
  • 1089. 復寫零
  • 1128. 等價多米諾骨牌對的數量 好題,真的很好的題
  • 劍指 Offer 66. 構建乘積陣列
  • 精選力扣300+題目之字串

  • 13.羅馬數碼轉整數
  • 67. 二進制求和
  • 434. 字串中的單詞數
  • 819. 最常見的單詞
  • 859. 親密字串
  • 686. 重復疊加字串匹配
  • 680. 驗證回文字串 Ⅱ
  • 精選力扣300+題目之連結串列

  • 21.合並兩個有序連結串列
  • 206.反轉連結串列
  • 237.刪除連結串列中的節點
  • 精選力扣300+題目之二分尋找

  • 167. 兩數之和 II - 輸入有序陣列
  • 278. 第一個錯誤的版本
  • 350. 兩個陣列的交集 II
  • 367. 有效的完全平方數
  • 374. 猜數碼大小
  • 392. 判斷子序列
  • 441. 排列硬幣
  • 475. 供暖器,很經典
  • 704. 二分尋找
  • 744. 尋找比目標字母大的最小字母
  • 29. 兩數相除
  • 34. 在排序陣列中尋找元素的第一個和最後一個位置
  • 153. 尋找旋轉排序陣列中的最小值
  • 162. 尋找峰值
  • 287. 尋找重復數
  • 378. 有序矩陣中第K小的元素
  • 436. 尋找右區間,很好的題
  • 454. 四數相加 II
  • 792. 匹配子序列的單詞數
  • 精選力扣300+題目之雙指標

  • 532.陣列中的數對
  • 925.長按鍵入
  • 56.合並區間
  • 75. 顏色分類
  • 80. 刪除排序陣列中的重復項 II 很好的題目
  • 424. 替換後的最長重復字元
  • 485. 最大連續1的個數(easy)
  • 524. 透過刪除字母匹配到字典裏最長單詞
  • 986. 區間列表的交集
  • 1004. 最大連續1的個數 III
  • 1498. 滿足條件的子序列數目
  • 精選力扣300+題目之貪心演算法

  • 944.刪列造序
  • 1029.兩地排程
  • 1046.最後一塊石頭的重量
  • 1049.最後一塊石頭的重量 II
  • 1217.玩籌碼
  • 1221.分割平衡字串
  • 精選力扣300+題目之深度優先搜尋(DFS)

  • 面試題 04.02.最小高度樹
  • 104.二叉樹的最大深度
  • 111.二叉樹的最小深度
  • 200. 島嶼數量
  • 111. 二叉樹的最小深度
  • 102. 二叉樹的層序遍歷
  • 107. 二叉樹的層序遍歷 II
  • 101. 對稱二叉樹
  • 以上是一些會重點考察的問題,建議在面試前好好刷刷!!!

    寫了這麽多手都酸了,如果我的上述回答對你有所幫助的話,幫@阿秀學長點個贊嗎,感謝!

    卑微求個贊ing。。。算了,再給你分享一個寶貝吧, 這回應該總不會白嫖我了吧,一個贊就足夠!

    最近發現三位谷歌大神寫演算法刷題資料,支持Java、C++、Go三種語言,其中對於面試中考察較多的連結串列、樹、動態規劃、陣列等知識點講解的都很全!

    如果你演算法能力比較弱,比如互聯網大廠面試中手撕演算法比較差的話,那要好好看看了。

    推薦閱讀

    最後再送上一些幹貨,下面是一個 高贊回答合集 ,建議你 點贊&收藏, 千萬要Mark住啊,丟了可能就找不到了,因為你 大學學習電腦期間絕對用得上, 其中有好幾個都是 收藏過萬的回答。

    記得收藏的時候幫學長 @阿秀 點個贊呀!! 不要只收藏不點贊啊, (๑•̀ㅂ•́) ✧ 拒絕白嫖,人人有責!

    如果有 電腦學習、校招求職、考研、讀研感興趣 的小夥伴也可以點選下方卡片關註下阿秀鴨

    一直致力於分享 電腦學習、校招相關、硬核技術等 ,讓你們不再讓我走過的彎路!

    1、如果你也是準備校招的同學,可以看下這裏,這是一些前人總結的歷屆校招上岸分享文章匯總。

    這是由字節跳動、阿裏、騰訊三位電腦學長共同維護的電腦校招技術崗各方向學習路線合集(C++、Java、Golang、前端等)&電腦校招歷屆上岸分享合集,已經開源到github上了。

    2、學習編程其實沒你想的那麽難,完整復盤我系統準備校招&自學的那一年,好好閱讀下去,對你肯定有所幫助。

    3、對於一些想要轉行或者讀研的朋友,下面兩個回答肯定能幫到你!

    4、如果你決定不了到底學習C++還是Java,不妨來看看這個回答!還有就是建議多看經典書,而不是什麽【七天教你學會Java】、【21天C++從入門到精通】系列,這類別的書完全是浪費時間,讓你走歪路!

    5、Linux C/C++ 方向自學的完整路線,很多人不知道學習完 C++ Primer 能做什麽專案練手,這個回答不可錯過!

    6、如果你準備時間不多,就抓住重點,在最短的時間內搞定必要的數據結構和演算法而去面試

    7、我自己在學習電腦過程中看過的優質網課,這些精品課程你的大學四年絕對夠用了。