图书目录

目录

扫一扫

配套资源

第一部分数据结构及其应用

第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——最长重复子串★★★

推荐练习题