目录
扫一扫
配套资源
第一部分数据结构及其应用
第1章数组
1.1数组概述
1.1.1数组的定义
1.1.2数组的知识点
1.2数组的基本算法设计
1.2.1LeetCode27——移除元素★
1.2.2LeetCode283——移动0★
1.2.3LeetCode2460——对数组执行操作★
1.2.4LeetCode75——颜色的分类★★
1.2.5LeetCode189——轮转数组★★
1.3有序数组的算法设计
1.3.1LeetCode26——删除有序数组中的重复项★
1.3.2LeetCode80——删除有序数组中的重复项Ⅱ★★
1.3.3LeetCode1287——有序数组中出现次数超过元素总数25%的
元素★
1.3.4LeetCode1200——最小绝对差★
1.3.5LeetCode88——合并两个有序数组★
1.3.6LeetCode349——两个数组的交集★
1.3.7LeetCode977——有序数组的平方★
1.3.8LeetCode1470——重新排列数组★
1.3.9LeetCode1213——3个有序数组的交集★
1.3.10LeetCode264——丑数Ⅱ★★
1.3.11LeetCode373——查找和最小的k对数字★★
推荐练习题
第2章链表
2.1链表概述
2.1.1链表的定义
2.1.2链表的知识点
2.2链表基本操作的算法设计
2.2.1LeetCode203——移除链表元素★
2.2.2LeetCode206——反转链表★
2.2.3LeetCode328——奇偶链表★★
2.2.4LeetCode61——旋转链表★★
2.2.5LeetCode141——环形链表★
2.2.6LeetCode138——复制带随机指针的链表★★
2.2.7LeetCode707——设计链表★★
2.3链表的分组算法设计
2.3.1LeetCode92——反转链表Ⅱ★★
2.3.2LeetCode24——两两交换链表中的结点★★
2.3.3LeetCode25——k个一组翻转链表★★★
2.4有序链表的算法设计
2.4.1LeetCode83——删除排序链表中的重复元素★
2.4.2LeetCode82——删除排序链表中的重复元素Ⅱ★★
2.4.3LeetCode21——合并两个有序链表★
2.4.4LeetCode23——合并k个有序链表★★★
2.4.5LeetCode1634——求两个多项式链表的和★★
推荐练习题
第3章栈
3.1栈概述
3.1.1栈的定义
3.1.2栈的知识点
3.2扩展栈的算法设计
3.2.1LeetCode1381——设计一个支持增量操作的栈★★
3.2.2LeetCode155——最小栈★
3.2.3LeetCode716——最大栈★★★
3.3栈应用的算法设计
3.3.1LeetCode1544——整理字符串★★
3.3.2LeetCode71——简化路径★★
3.3.3LeetCode1441——用栈操作构建数组★
3.3.4LeetCode946——验证栈序列★★
3.3.5LeetCode20——有效的括号★
3.3.6LeetCode1249——删除无效的括号★★
3.3.7LeetCode32——最长的有效括号子串的长度★★★
3.4单调栈应用的算法设计
3.4.1LeetCode503——下一个更大元素Ⅱ★★
3.4.2LeetCode496——下一个更大元素Ⅰ★
3.4.3LeetCode739——每日温度★★
3.4.4LeetCode316——去除重复字母★★
3.4.5LeetCode84——柱状图中最大的矩形★★★
3.4.6LeetCode42——接雨水★★★
推荐练习题
第4章队列和双端队列
4.1队列和双端队列概述
4.1.1队列和双端队列的定义
4.1.2队列和双端队列的知识点
4.2扩展队列的设计
4.2.1LeetCode622——设计循环队列★★
4.2.2LeetCode641——设计循环双端队列★★
4.2.3LeetCode1670——设计前中后队列★★
4.2.4LeetCode232——用栈实现队列★
4.3队列的应用
4.3.1LeetCode1700——无法吃午餐的学生的数量★
4.3.2LeetCode933——最近的请求次数★
4.3.3LeetCode225——用队列实现栈★
4.3.4LeetCode281——锯齿迭代器★★
4.3.5LeetCode1047——删除字符串中所有的相邻重复项★
4.4单调队列
4.4.1LeetCode239——滑动窗口的最大值★★★
4.4.2LeetCode1438——绝对差不超过限制的最长连续子数组★★
4.4.3LCR184——设计自助结算系统★★
推荐练习题
第5章哈希表
5.1哈希表概述
5.1.1哈希表的定义
5.1.2哈希表的知识点
5.2哈希表的实现
5.2.1LeetCode705——设计哈希集合★
5.2.2LeetCode706——设计哈希映射★
5.3哈希集合应用的算法设计
5.3.1LeetCode349——两个数组的交集★
5.3.2LeetCode202——快乐数★
5.3.3LeetCode217——存在重复元素★
5.3.4LeetCode379——电话目录管理系统★★
5.3.5LeetCode128——最长连续序列★★
5.3.6LeetCode41——缺失的第一个正数★★★
5.3.7LeetCode1436——旅行终点站★
5.4哈希映射应用的算法设计
5.4.1LeetCode350——两个数组的交集Ⅱ★
5.4.2LeetCode1460——通过翻转子数组使两个数组相等★
5.4.3LeetCode383——赎金信★
5.4.4LeetCode347——前k个高频元素★★
5.4.5LeetCode242——有效的字母异位词★
5.4.6LeetCode205——同构字符串★
5.4.7LeetCode1——两数之和★
5.4.8LeetCode219——存在重复元素Ⅰ★
5.4.9LeetCode49——字母异位词的分组★★
5.4.10LeetCode249——移位字符串的分组★★
推荐练习题
第6章二叉树
6.1二叉树概述
6.1.1二叉树的定义
6.1.2二叉树的知识点
6.2二叉树先序、中序和后序遍历应用的算法设计
6.2.1LeetCode144——二叉树的先序遍历★
6.2.2LeetCode94——二叉树的中序遍历★
6.2.3LeetCode145——二叉树的后序遍历★
6.2.4LeetCode965——单值二叉树★
6.2.5LeetCode100——相同的树★
6.2.6LeetCode572——另一棵树的子树★
6.2.7LeetCode543——二叉树的直径★
6.2.8LeetCode563——二叉树的坡度★
6.2.9LeetCode2331——计算二叉树的布尔运算值★
6.2.10LeetCode199——二叉树的右视图★★
6.2.11LeetCode662——二叉树的最大宽度★★
6.3二叉树层次遍历应用的算法设计
6.3.1LeetCode102——二叉树的层次遍历★★
6.3.2LeetCode199——二叉树的右视图★★
6.3.3LeetCode637——二叉树的层平均值★
6.3.4LeetCode2471——逐层排序二叉树所需的最少操作数目★★
6.3.5LeetCode2415——反转二叉树的奇数层★★
6.3.6LeetCode1602——找二叉树中最近的右侧结点★★
6.4构造二叉树的算法设计
6.4.1LeetCode105——由先序与中序遍历序列构造二叉树★★
6.4.2LeetCode106——由中序与后序遍历序列构造二叉树★★
6.4.3LeetCode2196——根据描述创建二叉树★★
6.5二叉树序列化的算法设计
6.5.1LeetCode297——二叉树的序列化与反序列化★★★
6.5.2LeetCode100——相同的树★
6.5.3LeetCode572——另一棵树的子树★
推荐练习题
第7章二叉搜索树
7.1二叉搜索树概述
7.1.1二叉搜索树的定义
7.1.2二叉搜索树的知识点
7.2二叉搜索树基本操作的算法设计
7.2.1LeetCode1008——先序遍历构造二叉搜索树★★
7.2.2LeetCode700——二叉搜索树中的搜索★
7.2.3LeetCode701——二叉搜索树中的插入操作★★
7.2.4LeetCode450——删除二叉搜索树中的结点★★
7.3二叉搜索树特性的算法设计
7.3.1LeetCode270——最接近的二叉搜索树值★
7.3.2LeetCode235——二叉搜索树的最近公共祖先★★
7.3.3LeetCode938——二叉搜索树的范围和★
7.3.4LeetCode669——修剪二叉搜索树★★
7.3.5LeetCode776——拆分二叉搜索树★★
7.3.6LeetCode285——二叉搜索树中的中序后继★★
7.3.7LeetCode255——验证先序遍历序列二叉搜索树★★
7.4二叉搜索树基于中序遍历的算法设计
7.4.1LeetCode783——二叉搜索树结点的最小距离★
7.4.2LeetCode230——二叉搜索树中第k小的元素★★
7.4.3LeetCode98——验证二叉搜索树★★
7.4.4LeetCode538——把二叉搜索树转换为累加树★★
7.4.5LeetCode99——恢复二叉搜索树★★
7.4.6LeetCode173——二叉搜索树迭代器★★
7.4.7LeetCode272——最接近的二叉搜索树值Ⅱ★★★
推荐练习题
第8章平衡二叉树
8.1平衡二叉树概述
8.1.1平衡二叉树的定义
8.1.2平衡二叉树的知识点
8.2构造平衡二叉树的算法设计
8.2.1LeetCode108——将有序数组转换为平衡二叉树★
8.2.2LeetCode109——将有序链表转换为平衡二叉树★★
8.2.3LeetCode1382——将二叉搜索树转换为平衡二叉树★★
8.3平衡树集合应用的算法设计
8.3.1LeetCode506——相对名次★
8.3.2LeetCode414——第三大的数★
8.3.3LeetCode855——考场就座★★
8.3.4LeetCode2353——设计食物评分系统★★
8.4平衡树映射应用的算法设计
8.4.1LeetCode846——一手顺子★★
8.4.2LeetCode981——基于时间的键值存储★★
8.4.3LeetCode1912——设计电影租借系统★★★
推荐练习题
第9章优先队列
9.1优先队列概述
9.1.1优先队列的定义
9.1.2优先队列的知识点
9.2优先队列的实现
9.2.1LeetCode912——排序数组★★
9.2.2LeetCode215——数组中第k个最大的元素★★
9.2.3LeetCode506——相对名次★
9.3优先队列应用的算法设计
9.3.1LeetCode703——数据流中第k大的元素★
9.3.2LeetCode373——查找和最小的k对数字★★
9.3.3LeetCode23——合并k个有序链表★★★
9.3.4LeetCode239——滑动窗口的最大值★★★
9.3.5LeetCode1383——最大的团队表现值★★★
9.3.6LeetCode2462——雇佣k位工人的总代价★★
推荐练习题
第10章并查集
10.1并查集概述
10.1.1并查集的定义
10.1.2并查集的实现
10.1.3带权并查集
10.2一维并查集应用的算法设计
10.2.1LeetCode261——以图判树★★
10.2.2LeetCode323——无向图中连通分量的数目★★
10.2.3LeetCode684——冗余连接★★
10.2.4LeetCode785——判断二分图★★
10.2.5LeetCode990——等式方程的可满足性★★
10.2.6LeetCode1061——按字典序排列最小的等价字符串★★
10.2.7LeetCode947——移除最多的同行或同列石头★★
10.3二维并查集
10.3.1LeetCode200——岛屿的数量★★
10.3.2LeetCode1559——在二维网格图中探测环★★
10.4带权并查集
10.4.1LeetCode695——最大岛屿的面积★★
10.4.2LeetCode128——最长连续序列★★
10.4.3LeetCode1254——统计封闭岛屿的数目★★
10.4.4LeetCode399——除法求值★★
推荐练习题
第11章前缀和与差分
11.1前缀和与差分概述
11.1.1前缀和
11.1.2差分
11.2一维前缀和应用的算法设计
11.2.1LeetCode724——寻找数组的中心下标★
11.2.2LeetCode238——除自身以外数组的乘积★★
11.2.3LeetCode1749——任意子数组和的绝对值的最大值★★
11.2.4LeetCode1524——和为奇数的子数组的数目★★
11.2.5LeetCode560——和为k的子数组★★
11.2.6LeetCode325——和等于k的最长子数组的长度★★
11.2.7LeetCode523——连续子数组和★★
11.2.8LeetCode53——最大子数组和★★
11.3二维前缀和应用的算法设计
11.3.1LeetCode304——二维区域和检索(矩阵不可变)★★
11.3.2LeetCode1074——元素和为目标值的子矩阵的数量★★★
11.3.3面试题17.24——最大子矩阵★★★
11.4差分数组应用的算法设计
11.4.1LeetCode370——区间加法★★
11.4.2LeetCode1109——航班预订统计★★
11.4.3LeetCode2536——子矩阵元素加1★★
推荐练习题
第12章线段树
12.1线段树概述
12.1.1线段树的定义
12.1.2简单线段树的实现
12.1.3复杂线段树的实现
12.1.4线段树的动态开点实现
12.1.5离散化
12.2简单线段树应用的算法设计
12.2.1LeetCode303——区域和检索(数组不可变)★
12.2.2LeetCode308——二维区域和检索(可改)★★★
12.2.3LeetCode327——区间和的个数★★★
12.3复杂线段树应用的算法设计
12.3.1LeetCode715——Range模块★★★
12.3.2LeetCode1622——奇妙序列★★★
12.4离散化在线段树中的应用
12.4.1LeetCode327——区间和的个数★★★
12.4.2LeetCode315——计算右侧小于当前元素的个数★★★
推荐练习题
第13章树状数组
13.1树状数组概述
13.1.1树状数组的定义
13.1.2树状数组的实现
13.2树状数组应用的算法设计
13.2.1LeetCode1649——通过指令创建有序数组★★★
13.2.2LeetCode1409——查询带键的排列★★
13.2.3LeetCode683——k个关闭的灯泡★★★
13.2.4LeetCode308——二维区域和检索(可改)★★★
13.3离散化在树状数组中的应用
13.3.1LeetCode327——区间和的个数★★★
13.3.2LeetCode315——计算右侧小于当前元素的个数★★★
推荐练习题
第14章字典树和后缀数组
14.1字典树和后缀数组概述
14.1.1字典树
14.1.2后缀数组
14.2字典树应用的算法设计
14.2.1LeetCode208——实现Trie(前缀树)★★
14.2.2LeetCode14——最长公共前缀★
14.2.3LeetCode648——单词替换★★
14.2.4LeetCode677——键值映射★★
14.2.5LeetCode792——匹配子序列的单词数★★
14.3后缀数组应用的算法设计
14.3.1LeetCode1698——字符串的不同子串的个数★★
14.3.2LeetCode1044——最长重复子串★★★
推荐练习题