数据结构与算法系列笔记(代码随想录精华)
👋 欢迎来到数据结构与算法系列!
本系列主要整理自"代码随想录"与 Leetcode 经典题解,结合个人理解与实战经验,适合算法初学者和进阶者查阅。内容涵盖数组、链表等核心数据结构与常见算法题型,力求让每一篇都通俗易懂、实用有体系。
为什么要做这个系列?
- 记录自己在代码随想录算法训练营的刷题经历。
- 通过做系统化笔记,方便自己复习,也能帮助更多同学高效刷题。
- 希望把零散的算法知识串成体系,降低入门门槛。
数据结构分类
按照不同的数据结构类型,我将笔记分为以下几个专题:
📚 数组专题
数组是最基础的数据结构之一,也是算法题中最常见的题型。
- 二分查找
- 双指针技巧
- 滑动窗口
- 矩阵操作
🔗 链表专题
链表是一种常见的线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。
- 链表的基本操作
- 虚拟头节点的使用
- 链表反转
- 快慢指针技巧
🔍 哈希表专题
哈希表是一种高效的数据结构,支持快速的插入、删除和查找操作。
- 计数与查找
- 去重操作
- 数组作为简易哈希表
- 多重哈希表应用
📝 字符串专题
字符串是由字符组成的序列,是编程中最常见的数据类型之一。
- 字符串的基本操作
- 双指针在字符串中的应用
- 字符串匹配算法
📚 栈与队列专题
栈和队列是两种重要的线性数据结构,具有特殊的插入和删除规则。
- 栈的基本操作(后进先出)
- 队列的基本操作(先进先出)
- 栈与队列的相互实现
- 单调栈与单调队列
- 优先队列(堆)的应用
🌳 二叉树专题
二叉树是一种重要的非线性数据结构,每个节点最多有两个子节点。
- 二叉树的基本概念和性质
- 二叉树的遍历方法(前序、中序、后序、层序)
- 二叉搜索树的特性和操作
- 二叉树的构造与修改
- 二叉树的路径和深度问题
🔄 回溯算法专题
回溯算法是一种通过试错来寻找问题解的算法,当发现当前选择不能得到有效解时,就回退并尝试其他选择。
- 回溯算法的基本思想和模板
- 组合问题的求解
- 排列问题的求解
- 子集问题的求解
- 棋盘问题(N皇后、数独等)
🎯 贪心算法专题
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法。
- 贪心算法的基本思想和应用场景
- 基础贪心问题(分发饼干、摆动序列等)
- 序列问题(跳跃游戏、股票买卖等)
- 区间调度问题(重叠区间、合并区间等)
- 两个维度权衡问题
🧮 动态规划专题
动态规划是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式去解决的算法思想。
- 动态规划的基本理论和解题步骤
- 基础动态规划(斐波那契、爬楼梯、路径问题等)
- 背包问题系列(01背包、完全背包、多重背包)
- 打家劫舍系列(线性、环形、树形结构)
- 股票问题系列(不同交易限制下的最优策略)
- 子序列问题(最长递增子序列、最长公共子序列等)
- 编辑距离问题(字符串变换的最小操作数)
- 回文问题(回文子串、最长回文子序列等)
学习路径
建议按照以下顺序学习各个数据结构:
- 数组 - 最基础的数据结构,掌握双指针、二分查找等基本技巧
- 链表 - 理解指针操作和链式存储的特点
- 哈希表 - 学习高效的查找和统计方法
- 字符串 - 结合前面的知识,解决字符串处理问题
- 栈与队列 - 掌握这两种重要的线性数据结构
- 二叉树 - 树形结构的基础,理解递归思想
- 回溯算法 - 解决组合、排列等问题的重要算法思想
- 贪心算法 - 局部最优解决策,培养贪心思维
- 动态规划 - 复杂问题的最优子结构,掌握状态转移
如果你也在刷 Leetcode 或学习数据结构算法,欢迎一起交流、补充和完善这个系列!💪