虽然是用python搞机器学习的大项目,还是要从零开始学习数据结构那一套理论。不知不觉数据结构及算法系列的学习及LeetCode刷题已经一大堆,现对此汇总。
如下是一套比较合理的完整的学习路径:
1)数据结构与算法的理论,包括复杂度的思想,从线性表开始(链表,栈和队列),然后是数组和字符串的初级理论和题目(双指针);查找算法中深刻理解二分查找及哈希查找。
2)接下来打算学习树及二叉树相关姿势,树是最重要的数据结构,基础是遍历运算等;然后二叉搜索树、平衡二叉树等的基本知识,属于最重要的查找算法;
3)然后是排序的各种方法,需了解其原理和实现,复杂度及稳定性,可做的题目并不多;
至此基础知识已打好,可以应对基本的面试题目了。
4)进一步加深学习,可以学习动态规划/贪心/回溯算法思想,此时可以解决LeetCode许多难题了,DP在LeetCode中净是难题;
5)最后学习图算法及一些高级的问题,图算法在各教材中都会介绍,主要是存储遍历、连通性、最短路径、最大生成树等问题,也可以更深入的学习。
6)学习一些特殊的、高级的数据结构及算法,阅读畅销的算法设计相关书籍学习一些思想方法和算法的trick。
1.1 python数据结构之链表——功能实现
1.2 python数据结构之链表——倒数第k结点及链表合并
1.3 python数据结构之链表——链表右移/链表分割/链表逆序
1.4 python数据结构之链表——移除重复项及带随机指针的链表复制
1.5 python数据结构之链表——带环链表及交叉链表(双指针法)
1.6 python数据结构之双向链表/循环链表——以OrderedDict数据结构为例
2.1 python数据结构之栈和队列——功能实现
2.2.1 python数据结构之栈——应用(1)括号匹配及后缀表达式
2.2.2 python数据结构之栈——应用(2)中缀表达式计算与函数调用栈
2.2.3 python数据结构之栈——应用(3)Leetcode题目解析
2.3 python数据结构之队列——应用
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.1 python数据结构之串——概述和基本算法
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.1 python 字符串双指针/哈希算法1—— Reverse Vowels of a String & Longest Substring Without Repeating Characters
4.4.2 python 字符串双指针/哈希算法2 —— Substring with Concatenation of All Words & Group Anagrams
4.4.3 python 字符串双指针/哈希算法3 —— Minimum Window Substring & Smallest Range
5.1 python数据结构与算法之算法思想概述
5.2 递归算法及设计思想
6.1 查找算法概述
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.1 树及二叉树的概念及存储结构
7.2 二叉树的基本运算及遍历的python实现
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.7.1 外查找之 B-tree、B+tree 认识
7.7.2 (转载) B树、B+树、B*树(1)
7.7.3 (转载) B树、B+树、B*树(2)
7.8.1 带你学习红黑树(1)
7.9 哈夫曼树(Huffman Tree)
7.10.1 优先队列及堆
7.10.2 (python)堆的应用及Leetcode题目解析
7.11.1 Trie 树(字典树)简介与实现
7.12.1 线段树原理及应用(上)
8.1.1 排序算法概述及python基本实现(上)
8.1.2 排序算法概述及python基本实现(下)
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.1 数据结构之图的基本概念及存储结构
10. 1 动态规划及贪心算法概述
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
10.6 贪心算法详解及LeetCode题目