如何學習數據結構與算法? (加油,你能夠的)

精通一個領域(數據結構與算法)

  • Chunk it up 切碎知識點

    數據結構(https://naotu.baidu.com/file/b832f043e2ead159d584cca4efb19703?token=7a6a56eb2630548c)

    庖丁解牛 把數據結構的一個又一個知識點分解開來面試

    It is important to view knowledge as sort of a semantic tree —— ElonMusk算法

    覃超建議 把數據結構這麼分:數組

    • 一維數據結構
      • 基礎:數組array (string),鏈表 linked list
      • 高級:棧stack, 隊列queue, 雙端隊列deque, 集合set,映射map(hash or map), etc
    • 二維數據結構
      • 基礎:樹tree,圖graph
      • 高級:二叉搜索樹 binary search tree(red-black tree, AVL),堆heap,並查集disjoint set,字典樹Trie,etc
    • 特殊
      • 位運算Bitwise,布隆過濾器BloomFilter
      • LRU Cache

    算法(全部這些複雜的算法,其實到了最後就是找它的重複單元是什麼???)(https://naotu.baidu.com/file/0a53d3a5343bd86375f348b2831d3610?token=5ab1de1c90d5f3ec)

    • if-else, switch -> Branch數據結構

    • for, while loop -> Iterationide

    • 遞歸 Recursion(Divide & Conquer, Backtrace)oop

    • 這裏作個分割 下面的就是一些高級一點的算法學習

    • 搜索 Search:深度優先搜索 Depth first search,廣度優先搜索Breadth first search,A*, etc測試

    • 動態規劃 Dynamic Programming優化

    • 二分查找 Binary Searchspa

    • 貪心 Greedy

    • 數學 Math,幾何 Geometry

      注意:在頭腦中回憶上面每種算法的思想和代碼模版

      (動手繪製腦圖去)

  • Deliberate Practicing 刻意練習

    • 基本功練習(基本功是區分業餘和職業選手的根本)
    • 基礎動做的分解訓練和反覆練習 ——>>最大的誤區(若是你作一個算法題,若是你只作一遍,這就是你進行練習和切題的最大誤區,這是遠遠不夠的)
    • 刻意練習——過遍數(五遍刷題,五毒神掌)
    • 練習缺陷、弱點地方走出本身的溫馨區(枯燥 無味 煩躁 就是成長)一隻腳踏在溫馨區以外
    • 職業化訓練 CSGO 開一些專項練習的地圖(本身就練過233333,不管是CS仍是CS go)
    • 奧沙利文是真的牛逼
    • 別怕動態規劃啥的 通過幾十題的練習 確定就很熟練了
  • Feedback 反饋

    • 即時反饋
    • 主動型反饋(本身去找)
      • 高手代碼(GitHub, LeetCode, etc)
      • 第一視角直播
    • 被動式反饋(高手給你指點(如今這點對於我來講有點難啊,只能多去找朋友了))
      • code review

    LeetCode上面有不少別人寫的很是好的代碼

刷題的方式(切題四件套)

  • Clarification(多看幾遍題目 && 和麪試官多溝通,確保本身對題目的理解是對的)

    把題目看清楚 題目要幹嗎 很重要

  • Possible Solutions

    全部可能的想法。不要只用想到的第一種解法去解。要去用全部可能想到的方法,從中找出最優解法

    • compate (time / space)
    • optimal (增強)
  • Coding(多寫)

  • Test cases(測試用例要多寫幾個,給面試官大人感受,本身要善始善終)

五毒神掌

刷題第一遍

  • 五分鐘:讀題 + 思考 (若是基礎薄弱 能夠給本身10分鐘 最多15分鐘)這裏不能略過
  • 有思路 直接作 直接寫 || 超時 ——>> 直接看解法!注意!多解法,比較解法優劣(理解學習和運用算法 不是讓你去造輪子)
  • 背誦、默寫這樣好的寫法(並非死記硬背便可,先背誦記住了以後,通常來講確定就能理解了。不少題目之後看到就條件反射了)(不能打擊本身的積極性)

刷題第二遍

  • 立刻本身寫(一開始可能會有bug 不要緊 debug debug debug 修改修改修改) ——>LeetCode提交
  • 多種寫法、體會 ——>優化!(最重要的是執行時間)

刷題第三遍

  • 過了24 小時的時間之後,再次重複作題
  • 不一樣解法的熟練程度 ——> 專項練習

刷題第四遍

  • 過了一週以後: 反覆回來練習相同的題目

刷題第五遍

面試前一週恢復性的訓練

相關文章
相關標籤/搜索