文章首发于公众号『董小染』,算法文章主页:https://dongxiaoran.com/algo/
PS: 本仓库含有按类别总结题目的源码,便于本地 debug 练习。对于没有收录的题目,欢迎点击上方 Badge 链接阅读我的 LeetCode Solution Well Explained 代码。如果对你有帮助欢迎在 Github 点个 Star,给我继续更新的动力,谢谢!
在当前 LeetCode 千题时代下,刷完所有的题目是不现实的,因此更重要的是培养自己的算法思维和扎实数据结构知识,举一反三,深化思维。我们的目的不是完成题目,而是掌握思维过程和解决问题的能力,争取做一题解决一类题目,一通百通,高效快速准备算法面试。
本仓库归纳总结了 LeetCode 的同类型及相似思路的题目,按照从易到难的顺序,从线性到非线性数据结构的『增删改查』,从基础 Iterative 到深化 Recursion 思想,从 Intuitive 的算法到高阶的优化技巧,选取都是我认为比较经典或培养算法思维的题目,带你搭建起来自己的思维框架和套路模板。
- 第一部分:从基础数据结构入手,从递归思想的入门与深化,再到高频的双指针和排序算法。
- 第二部分:掌握搜索算法,宽度优先,深度优先,到记忆化存储,剪枝优化,入门动态规划。
- 第三部分:高频面试题目分析,复杂题目讲解,高级数据结构等。
在开始刷题学习前,花几分钟阅读一下我总结的算法学习方法论和我的刷题练习经验分享,帮助你建立一个更清晰的 big picture 和学习思路。
- Article: 一题顶四题,一道题掌握 LinkedList 的 Iterative
- Algorithm Questions:
- LC143: Reorder List
- LC876: Find the middle node of Linked List
- LC206: Reverse Linked List
- LC21: Merge Two Sorted Linked list
- Solution: My Java Code
- Article: Tree 还可以这样 O(1) 空间遍历?四题带你深入理解 LinkedList 与 Tree 的关系
- Algorithm Questions:
- LC114: Flatten Binary Tree to Linked List
- LC430: Flatten a Multilevel Doubly Linked List
- LC116: Populating Next Right Pointers in Each Node
- LC117: Populating Next Right Pointers in Each Node II
- Solution: My Java Code
-
Introduction to Recursion
-
Recursion in LinkedList
-
Recursion in Tree
-
Recursion to Iterative
-
Two Sum Pattern: Code
-
Slow-Fast Pointers
-
K-way Merge
-
Deduplication
-
Sliding Window
-
Partition
-
Merge Sort
-
Quick Sort
-
Quick Selection
-
Comparison-based Sort
-
Level Order Traversal
-
The Shortest Path
-
Connected Component
-
Topology Sorting
-
Best First Search and Dijkstra
-
Subset
-
Permutation
-
Parentheses
-
Memoization
-
Graph Search
-
1D DP
-
2D DP
-
Greedy
-
Merge Intervals
-
Two Heap Pattern
-
Top-K Problem
-
Union Find
-
Data Structure Design
-
Bit Operations