雖然是用python搞機器學習的大項目,還是要從零開始學習數據結構那一套理論。不知不覺數據結構及算法系列的學習及LeetCode刷題已經一大堆,現對此彙總。
如下是一套比較合理的完整的學習路徑:
1)數據結構與算法的理論,包括複雜度的思想,從線性表開始(鏈表,棧和隊列),然後是數組和字符串的初級理論和題目(雙指針);查找算法中深刻理解二分查找及哈希查找。
2)接下來打算學習樹及二叉樹相關姿勢,樹是最重要的數據結構,基礎是遍歷運算等;然後二叉搜索樹、平衡二叉樹等的基本知識,屬於最重要的查找算法;
3)然後是排序的各種方法,需瞭解其原理和實現,複雜度及穩定性,可做的題目並不多;
至此基礎知識已打好,可以應對基本的面試題目了。
4)進一步加深學習,可以學習動態規劃/貪心/回溯算法思想,此時可以解決LeetCode許多難題了,DP在LeetCode中淨是難題;
5)最後學習圖算法及一些高級的問題,圖算法在各教材中都會介紹,主要是存儲遍歷、連通性、最短路徑、最大生成樹等問題,也可以更深入的學習。
6)學習一些特殊的、高級的數據結構及算法,閱讀暢銷的算法設計相關書籍學習一些思想方法和算法的trick。
1 鏈表
1.2 python數據結構之鏈表——倒數第k結點及鏈表合併
1.3 python數據結構之鏈表——鏈表右移/鏈表分割/鏈表逆序
1.4 python數據結構之鏈表——移除重複項及帶隨機指針的鏈表複製
1.5 python數據結構之鏈表——帶環鏈表及交叉鏈表(雙指針法)
1.6 python數據結構之雙向鏈表/循環鏈表——以OrderedDict數據結構爲例
2 棧和隊列
2.2.1 python數據結構之棧——應用(1)括號匹配及後綴表達式
2.2.2 python數據結構之棧——應用(2)中綴表達式計算與函數調用棧
2.2.3 python數據結構之棧——應用(3)Leetcode題目解析
3 數組
3.1 雙指針
3.1.1 python數組雙指針算法1——求和問題(LeetCode 2sum & 3sum & 4sum)
3.1.2 python數組雙指針算法2——元素交換(LeetCode Remove Duplicates from Sorted Array & Remove Element)
3.1.3 python數組雙指針算法3——滑動窗口(LeetCode Subarray Product Less Than K & Container With Most Water)
3.2 其他
3.2.1 LeetCode數組類題目選做(1)—— First Missing Positive & Majority Element & Product of Array Except Self
3.2.2 LeetCode數組類題目選做(2)—— Spiral Matrix & Rotate Image & Set Matrix Zeroes
4 字符串
4.2 基礎題目/字符串解析
4.2.1 LeetCode字符串類題目選做(1) —— Roman to Integer & Text Justification
4.2.2 LeetCode字符串類題目選做(2)—— Length of Last Word & Reverse Words in a String
4.2.3 LeetCode字符串類題目選做(3) —— String to Integer (atoi) & Integer to English Words
4.3 LeetCode字符串題目選做之迴文——Valid Palindrome & Shortest Palindrome
4.4 雙指針/哈希等其他應用
4.4.2 python 字符串雙指針/哈希算法2 —— Substring with Concatenation of All Words & Group Anagrams
4.4.3 python 字符串雙指針/哈希算法3 —— Minimum Window Substring & Smallest Range
5 遞歸
6 查找
6.2.1 python二分查找算法及LeetCode題目(1) —— Find First and Last Position & Find Peak Element
6.2.2 python二分查找算法及LeetCode題目(2)之旋轉的數組 —— Search in Rotated Sorted Array
6.2.3 python二分查找算法及LeetCode題目(3)之二維數組 —— Search a 2D Matrix
7 樹
7.3.1 二叉樹遍歷的應用及LeetCode題目解析(1)
7.3.2 python 二叉樹層次遍歷應用及LeetCode題目解析(2)
7.4.1 python二叉樹路徑問題及LeetCode題目解析(1)
7.4.2 python二叉樹路徑問題及LeetCode題目解析(2)
7.5 二叉查找樹(BST)及平衡二叉樹(AVL)的概念及基本運算
7.6.1 (python)BST LeetCode題目 —— Minimum Absolute Difference in BST & Convert BST to Greater Tree
7.6.2 (python)AVL LeetCode題目 及 AVL結點插入操作詳解
7.6.3 (python)BST LeetCode題目 —— Delete Node in a BST & Recover Binary Search Tree
7.10.2 (python)堆的應用及Leetcode題目解析
8 排序
8.2.1 (python)排序算法之鏈表排序LeetCode題目(1) —— Sort List & Merge k Sorted Lists
8.2.2 (python)排序算法及LeetCode題目(2) —— Insert Interval & Contains Duplicate III & Wiggle Sort II
8.2.3 python排序LeetCode題目(3) —— K Pairs with Smallest Sums & Kth Smallest Element in a Sorted Matrix
9 圖
10 動態規劃及貪心算法
10.2 動態規劃算法套路及空間優化 —— Climbing Stairs & Unique Paths
10.3 動態規劃數組類題目
10.3.1 (python) 動態規劃數組類LeetCode題目 —— Minimum Path Sum & Triangle & Maximum Product Subarray
10.3.2 (python) 動態規劃數組類LeetCode題目 —— Decode Ways & Range Sum Query 2D
10.3.3 (python) 動態規劃數組類LeetCode題目 —— Dungeon Game & Frog Jump
10.4 動態規劃專題應用
10.4.1 (python) 動態規劃專題之最長遞增子序列 —— Longest Increasing Subsequence & Russian Doll Envelopes
10.4.2 (python) 動態規劃專題之換零錢 —— Coin Change & Perfect Squares
10.4.3 (python) 動態規劃專題之股票買賣 —— Best Time to Buy and Sell Stock
10.5 動態規劃字符串類題目
10.5.1 (python) 動態規劃字符串類LeetCode題目 —— Edit Distance & Regular Expression Matching
10.5.2 (python) 動態規劃字符串類LeetCode題目 —— Interleaving String & Distinct Subsequences