本书适合于需要行算法面试的读者,通过阅读本书可以掌握算法面试中求解问题的方法和技巧,提升自己的算法技能和思维方式,从而在面试中脱颖而出。同时,本书可以作为“数据结构”和“算法设计与分析”课程的辅导书,也可以供各种程序设计竞赛和计算机编程爱好者研习。
售 价:¥
纸质售价:¥99.00购买纸书
6.4
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐

内容简介
作者简介
前言
目录
算法面试(上册)
第一部分 数据结构及其应用
第1章 数组
1.1 数组概述
1.1.1 数组的定义
1.1.2 数组的知识点
1.2 数组的基本算法设计
1.2.1 LeetCode27——移除元素★
1.2.2 LeetCode283——移动0★
1.2.3 LeetCode2460——对数组执行操作★
1.2.4 LeetCode75——颜色的分类★★
1.2.5 LeetCode189——轮转数组★★
1.3 有序数组的算法设计
1.3.1 LeetCode26——删除有序数组中的重复项★
1.3.2 LeetCode80——删除有序数组中的重复项Ⅱ★★
1.3.3 LeetCode1287——有序数组中出现次数超过元素总数25%的元素★
1.3.4 LeetCode1200——最小绝对差★
1.3.5 LeetCode88——合并两个有序数组★
1.3.6 LeetCode349——两个数组的交集★
1.3.7 LeetCode977——有序数组的平方★
1.3.8 LeetCode1470——重新排列数组★
1.3.9 LeetCode1213——3个有序数组的交集★
1.3.10 LeetCode264——丑数Ⅱ★★
1.3.11 LeetCode373——查找和最小的k对数字★★
推荐练习题
第2章 链表
2.1 链表概述
2.1.1 链表的定义
2.1.2 链表的知识点
2.2 链表基本操作的算法设计
2.2.1 LeetCode203——移除链表元素★
2.2.2 LeetCode206——反转链表★
2.2.3 LeetCode328——奇偶链表★★
2.2.4 LeetCode61——旋转链表★★
2.2.5 LeetCode141——环形链表★
2.2.6 LeetCode138——复制带随机指针的链表★★
2.2.7 LeetCode707——设计链表★★
2.3 链表的分组算法设计
2.3.1 LeetCode92——反转链表Ⅱ★★
2.3.2 LeetCode24——两两交换链表中的结点★★
2.3.3 LeetCode25——k个一组翻转链表★★★
2.4 有序链表的算法设计
2.4.1 LeetCode83——删除排序链表中的重复元素★
2.4.2 LeetCode82——删除排序链表中的重复元素Ⅱ★★
2.4.3 LeetCode21——合并两个有序链表★
2.4.4 LeetCode23——合并k个有序链表★★★
2.4.5 LeetCode1634——求两个多项式链表的和★★
推荐练习题
第3章 栈
3.1 栈概述
3.1.1 栈的定义
3.1.2 栈的知识点
3.2 扩展栈的算法设计
3.2.1 LeetCode1381——设计一个支持增量操作的栈★★
3.2.2 LeetCode155——最小栈★
3.2.3 LeetCode716——最大栈★★★
3.3 栈应用的算法设计
3.3.1 LeetCode1544——整理字符串★★
3.3.2 LeetCode71——简化路径★★
3.3.3 LeetCode1441——用栈操作构建数组★
3.3.4 LeetCode946——验证栈序列★★
3.3.5 LeetCode20——有效的括号★
3.3.6 LeetCode1249——删除无效的括号★★
3.3.7 LeetCode32——最长的有效括号子串的长度★★★
3.4 单调栈应用的算法设计
3.4.1 LeetCode503——下一个更大元素Ⅱ★★
3.4.2 LeetCode496——下一个更大元素Ⅰ★
3.4.3 LeetCode739——每日温度★★
3.4.4 LeetCode316——去除重复字母★★
3.4.5 LeetCode84——柱状图中最大的矩形★★★
3.4.6 LeetCode42——接雨水★★★
推荐练习题
第4章 队列和双端队列
4.1 队列和双端队列概述
4.1.1 队列和双端队列的定义
4.1.2 队列和双端队列的知识点
4.2 扩展队列的设计
4.2.1 LeetCode622——设计循环队列★★
4.2.2 LeetCode641——设计循环双端队列★★
4.2.3 LeetCode1670——设计前中后队列★★
4.2.4 LeetCode232——用栈实现队列★
4.3 队列的应用
4.3.1 LeetCode1700——无法吃午餐的学生的数量★
4.3.2 LeetCode933——最近的请求次数★
4.3.3 LeetCode225——用队列实现栈★
4.3.4 LeetCode281——锯齿迭代器★★
4.3.5 LeetCode1047——删除字符串中所有的相邻重复项★
4.4 单调队列
4.4.1 LeetCode239——滑动窗口的最大值★★★
4.4.2 LeetCode1438——绝对差不超过限制的最长连续子数组★★
4.4.3 LCR184——设计自助结算系统★★
推荐练习题
第5章 哈希表
5.1 哈希表概述
5.1.1 哈希表的定义
5.1.2 哈希表的知识点
5.2 哈希表的实现
5.2.1 LeetCode705——设计哈希集合★
5.2.2 LeetCode706——设计哈希映射★
5.3 哈希集合应用的算法设计
5.3.1 LeetCode349——两个数组的交集★
5.3.2 LeetCode202——快乐数★
5.3.3 LeetCode217——存在重复元素★
5.3.4 LeetCode379——电话目录管理系统★★
5.3.5 LeetCode128——最长连续序列★★
5.3.6 LeetCode41——缺失的第一个正数★★★
5.3.7 LeetCode1436——旅行终点站★
5.4 哈希映射应用的算法设计
5.4.1 LeetCode350——两个数组的交集Ⅱ★
5.4.2 LeetCode1460——通过翻转子数组使两个数组相等★
5.4.3 LeetCode383——赎金信★
5.4.4 LeetCode347——前k个高频元素★★
5.4.5 LeetCode242——有效的字母异位词★
5.4.6 LeetCode205——同构字符串★
5.4.7 LeetCode1——两数之和★
5.4.8 LeetCode219——存在重复元素Ⅰ★
5.4.9 LeetCode49——字母异位词的分组★★
5.4.10 LeetCode249——移位字符串的分组★★
推荐练习题
第6章 二叉树
6.1 二叉树概述
6.1.1 二叉树的定义
6.1.2 二叉树的知识点
6.2 二叉树先序、中序和后序遍历应用的算法设计
6.2.1 LeetCode144——二叉树的先序遍历★
6.2.2 LeetCode94——二叉树的中序遍历★
6.2.3 LeetCode145——二叉树的后序遍历★
6.2.4 LeetCode965——单值二叉树★
6.2.5 LeetCode100——相同的树★
6.2.6 LeetCode572——另一棵树的子树★
6.2.7 LeetCode543——二叉树的直径★
6.2.8 LeetCode563——二叉树的坡度★
6.2.9 LeetCode2331——计算二叉树的布尔运算值★
6.2.10 LeetCode199——二叉树的右视图★★
6.2.11 LeetCode662——二叉树的最大宽度★★
6.3 二叉树层次遍历应用的算法设计
6.3.1 LeetCode102——二叉树的层次遍历★★
6.3.2 LeetCode199——二叉树的右视图★★
6.3.3 LeetCode637——二叉树的层平均值★
6.3.4 LeetCode2471——逐层排序二叉树所需的最少操作数目★★
6.3.5 LeetCode2415——反转二叉树的奇数层★★
6.3.6 LeetCode1602——找二叉树中最近的右侧结点★★
6.4 构造二叉树的算法设计
6.4.1 LeetCode105——由先序与中序遍历序列构造二叉树★★
6.4.2 LeetCode106——由中序与后序遍历序列构造二叉树★★
6.4.3 LeetCode2196——根据描述创建二叉树★★
6.5 二叉树序列化的算法设计
6.5.1 LeetCode297——二叉树的序列化与反序列化★★★
6.5.2 LeetCode100——相同的树★
6.5.3 LeetCode572——另一棵树的子树★
推荐练习题
第7章 二叉搜索树
7.1 二叉搜索树概述
7.1.1 二叉搜索树的定义
7.1.2 二叉搜索树的知识点
7.2 二叉搜索树基本操作的算法设计
7.2.1 LeetCode1008——先序遍历构造二叉搜索树★★
7.2.2 LeetCode700——二叉搜索树中的搜索★
7.2.3 LeetCode701——二叉搜索树中的插入操作★★
7.2.4 LeetCode450——删除二叉搜索树中的结点★★
7.3 二叉搜索树特性的算法设计
7.3.1 LeetCode270——最接近的二叉搜索树值★
7.3.2 LeetCode235——二叉搜索树的最近公共祖先★★
7.3.3 LeetCode938——二叉搜索树的范围和★
7.3.4 LeetCode669——修剪二叉搜索树★★
7.3.5 LeetCode776——拆分二叉搜索树★★
7.3.6 LeetCode285——二叉搜索树中的中序后继★★
7.3.7 LeetCode255——验证先序遍历序列二叉搜索树★★
7.4 二叉搜索树基于中序遍历的算法设计
7.4.1 LeetCode783——二叉搜索树结点的最小距离★
7.4.2 LeetCode230——二叉搜索树中第k小的元素★★
7.4.3 LeetCode98——验证二叉搜索树★★
7.4.4 LeetCode538——把二叉搜索树转换为累加树★★
7.4.5 LeetCode99——恢复二叉搜索树★★
7.4.6 LeetCode173——二叉搜索树迭代器★★
7.4.7 LeetCode272——最接近的二叉搜索树值Ⅱ★★★
推荐练习题
第8章 平衡二叉树
8.1 平衡二叉树概述
8.1.1 平衡二叉树的定义
8.1.2 平衡二叉树的知识点
8.2 构造平衡二叉树的算法设计
8.2.1 LeetCode108——将有序数组转换为平衡二叉树★
8.2.2 LeetCode109——将有序链表转换为平衡二叉树★★
8.2.3 LeetCode1382——将二叉搜索树转换为平衡二叉树★★
8.3 平衡树集合应用的算法设计
8.3.1 LeetCode506——相对名次★
8.3.2 LeetCode414——第三大的数★
8.3.3 LeetCode855——考场就座★★
8.3.4 LeetCode2353——设计食物评分系统★★
8.4 平衡树映射应用的算法设计
8.4.1 LeetCode846——一手顺子★★
8.4.2 LeetCode981——基于时间的键值存储★★
8.4.3 LeetCode1912——设计电影租借系统★★★
推荐练习题
第9章 优先队列
9.1 优先队列概述
9.1.1 优先队列的定义
9.1.2 优先队列的知识点
9.2 优先队列的实现
9.2.1 LeetCode912——排序数组★★
9.2.2 LeetCode215——数组中第k个最大的元素★★
9.2.3 LeetCode506——相对名次★
9.3 优先队列应用的算法设计
9.3.1 LeetCode703——数据流中第k大的元素★
9.3.2 LeetCode373——查找和最小的k对数字★★
9.3.3 LeetCode23——合并k个有序链表★★★
9.3.4 LeetCode239——滑动窗口的最大值★★★
9.3.5 LeetCode1383——最大的团队表现值★★★
9.3.6 LeetCode2462——雇佣k位工人的总代价★★
推荐练习题
第10章 并查集
10.1 并查集概述
10.1.1 并查集的定义
10.1.2 并查集的实现
10.1.3 带权并查集
10.2 一维并查集应用的算法设计
10.2.1 LeetCode261——以图判树★★
10.2.2 LeetCode323——无向图中连通分量的数目★★
10.2.3 LeetCode684——冗余连接★★
10.2.4 LeetCode785——判断二分图★★
10.2.5 LeetCode990——等式方程的可满足性★★
10.2.6 LeetCode1061——按字典序排列最小的等价字符串★★
10.2.7 LeetCode947——移除最多的同行或同列石头★★
10.3 二维并查集
10.3.1 LeetCode200——岛屿的数量★★
10.3.2 LeetCode1559——在二维网格图中探测环★★
10.4 带权并查集
10.4.1 LeetCode695——最大岛屿的面积★★
10.4.2 LeetCode128——最长连续序列★★
10.4.3 LeetCode1254——统计封闭岛屿的数目★★
10.4.4 LeetCode399——除法求值★★
推荐练习题
第11章 前缀和与差分
11.1 前缀和与差分概述
11.1.1 前缀和
11.1.2 差分
11.2 一维前缀和应用的算法设计
11.2.1 LeetCode724——寻找数组的中心下标★
11.2.2 LeetCode238——除自身以外数组的乘积★★
11.2.3 LeetCode1749——任意子数组和的绝对值的最大值★★
11.2.4 LeetCode1524——和为奇数的子数组的数目★★
11.2.5 LeetCode560——和为k的子数组★★
11.2.6 LeetCode325——和等于k的最长子数组的长度★★
11.2.7 LeetCode523——连续子数组和★★
11.2.8 LeetCode53——最大子数组和★★
11.3 二维前缀和应用的算法设计
11.3.1 LeetCode304——二维区域和检索(矩阵不可变)★★
11.3.2 LeetCode1074——元素和为目标值的子矩阵的数量★★★
11.3.3 面试题17.24——最大子矩阵★★★
11.4 差分数组应用的算法设计
11.4.1 LeetCode370——区间加法★★
11.4.2 LeetCode1109——航班预订统计★★
11.4.3 LeetCode2536——子矩阵元素加1★★
推荐练习题
第12章 线段树
12.1 线段树概述
12.1.1 线段树的定义
12.1.2 简单线段树的实现
12.1.3 复杂线段树的实现
12.1.4 线段树的动态开点实现
12.1.5 离散化
12.2 简单线段树应用的算法设计
12.2.1 LeetCode303——区域和检索(数组不可变)★
12.2.2 LeetCode308——二维区域和检索(可改)★★★
12.2.3 LeetCode327——区间和的个数★★★
12.3 复杂线段树应用的算法设计
12.3.1 LeetCode715——Range模块★★★
12.3.2 LeetCode1622——奇妙序列★★★
12.4 离散化在线段树中的应用
12.4.1 LeetCode327——区间和的个数★★★
12.4.2 LeetCode315——计算右侧小于当前元素的个数★★★
推荐练习题
第13章 树状数组
13.1 树状数组概述
13.1.1 树状数组的定义
13.1.2 树状数组的实现
13.2 树状数组应用的算法设计
13.2.1 LeetCode1649——通过指令创建有序数组★★★
13.2.2 LeetCode1409——查询带键的排列★★
13.2.3 LeetCode683——k个关闭的灯泡★★★
13.2.4 LeetCode308——二维区域和检索(可改)★★★
13.3 离散化在树状数组中的应用
13.3.1 LeetCode327——区间和的个数★★★
13.3.2 LeetCode315——计算右侧小于当前元素的个数★★★
推荐练习题
第14章 字典树和后缀数组
14.1 字典树和后缀数组概述
14.1.1 字典树
14.1.2 后缀数组
14.2 字典树应用的算法设计
14.2.1 LeetCode208——实现Trie(前缀树)★★
14.2.2 LeetCode14——最长公共前缀★
14.2.3 LeetCode648——单词替换★★
14.2.4 LeetCode677——键值映射★★
14.2.5 LeetCode792——匹配子序列的单词数★★
14.3 后缀数组应用的算法设计
14.3.1 LeetCode1698——字符串的不同子串的个数★★
14.3.2 LeetCode1044——最长重复子串★★★
推荐练习题
算法面试(下册)
第二部分 算法设计策略及其应用
第15章 穷举法
15.1 穷举法概述
15.1.1 什么是穷举法
15.1.2 顺序列举设计方法
15.1.3 组合列举设计方法
15.1.4 排列列举设计方法
15.2 顺序列举的算法设计
15.2.1 LeetCode485——1的最多连续个数★
15.2.2 LeetCode1464——数组中两个元素的最大乘积★
15.2.3 LeetCode829——连续整数求和★★★
15.2.4 LeetCode17——电话号码的字母组合★★
15.2.5 LeetCode845——数组中的最长山脉★★
15.2.6 LeetCode209——长度最小的子数组★★
15.2.7 LeetCode134——加油站★★
15.3 组合列举的算法设计
15.3.1 LeetCode78——子集★★
15.3.2 LeetCode90——子集Ⅱ★★
15.3.3 LeetCode77——组合★★
15.3.4 LeetCode1863——求出所有子集的异或总和再求和★
15.4 排列列举的算法设计
15.4.1 LeetCode46——全排列★★
15.4.2 LeetCode60——排列序列★★★
15.4.3 LeetCode52——n皇后Ⅱ★★★
推荐练习题
第16章 递归
16.1 递归概述
16.1.1 递归的定义
16.1.2 递归模型
16.1.3 递归的执行过程
16.1.4 递归算法的设计
16.1.5 使用递归的注意事项
16.2 基于递归数据结构的递归算法设计
16.2.1 LeetCode2487——从链表中移除结点★★
16.2.2 LeetCode21——合并两个有序链表★
16.2.3 LeetCode814——二叉树的剪支★★
16.2.4 LeetCode236——二叉树的最近公共祖先★★
16.2.5 LeetCode114——将二叉树展开为链表★★
16.3 基于归纳的递归算法设计
16.3.1 LeetCode17——电话号码的字母组合★★
16.3.2 LeetCode191——位1的个数★
16.3.3 LeetCode231——2的幂★
16.3.4 LeetCode394——字符串解码★★
推荐练习题
第17章 分治法
17.1 分治法概述
17.1.1 什么是分治法
17.1.2 二分查找及其扩展算法
17.2 基本分治算法设计
17.2.1 LeetCode169——多数元素★
17.2.2 LeetCode53——最大子数组和★★
17.2.3 LeetCode241——为运算表达式设计优先级★★
17.2.4 LeetCode95——不同的二叉搜索树Ⅱ★★
17.3 快速排序和二路归并排序应用的算法设计
17.3.1 LeetCode912——排序数组★★
17.3.2 LeetCode215——数组中第k大的元素★★
17.3.3 LeetCode315——计算右侧小于当前元素的个数★★★
17.3.4 LeetCode493——翻转对★★★
17.4 二分查找应用的算法设计
17.4.1 LeetCode69——x的平方根★
17.4.2 LeetCode167——有序数组中的两数之和Ⅱ★★
17.4.3 LeetCode74——搜索二维矩阵★★
17.4.4 LeetCode4——寻找两个正序数组的中位数★★★
17.4.5 LeetCode744——寻找比目标字母大的最小字母★
17.4.6 LeetCode153——寻找旋转排序数组中的最小值★★
17.4.7 LeetCode33——搜索旋转排序数组★★
17.4.8 LeetCode81——搜索旋转排序数组Ⅱ★★
17.4.9 LeetCode315——计算右侧小于当前元素的个数★★★
17.4.10 LeetCode493——翻转对★★★
17.4.11 LeetCode215——数组中第k大的元素★★
17.4.12 LeetCode378——有序矩阵中第k小的元素★★
17.4.13 LeetCode410——分割数组的最大值★★★
17.4.14 LeetCode1011——在D天内送达包裹的能力★★
推荐练习题
第18章 DFS、BFS 和拓扑排序
18.1 DFS、BFS和拓扑排序概述
18.1.1 深度优先搜索
18.1.2 广度优先搜索
18.1.3 拓扑排序
18.2 深度优先遍历应用的算法设计
18.2.1 LeetCode200——岛屿的数量★★
18.2.2 LeetCode463——岛屿的周长★
18.2.3 LeetCode130——被围绕的区域★★
18.2.4 LeetCode529——扫雷游戏★★
18.2.5 LeetCode365——水壶问题★★
18.2.6 LeetCode332——重新安排行程★★★
18.3 广度优先遍历应用的算法设计
18.3.1 LeetCode200——岛屿的数量★★
18.3.2 LeetCode130——被围绕的区域★★
18.3.3 LeetCode529——扫雷游戏★★
18.3.4 LeetCode365——水壶问题★★
18.3.5 LeetCode1162——地图分析★★
18.3.6 LeetCode847——访问所有结点的最短路径★★★
18.3.7 LeetCode2608——图中的最短环★★★
18.3.8 LeetCode2204——无向图中到环的距离★★★
18.3.9 LeetCode127——单词接龙★★★
18.3.10 LeetCode934——最短的桥★★
18.4 拓扑排序应用的算法设计
18.4.1 LeetCode1462——课程安排Ⅳ★★
18.4.2 LeetCode802——找到最终的安全状态★★
18.4.3 LeetCode269——火星词典★★★
推荐练习题
第19章 回溯法
19.1 回溯法概述
19.1.1 什么是回溯法
19.1.2 回溯法的算法设计
19.2 子集树的回溯算法设计
19.2.1 LeetCode78——子集★★
19.2.2 LeetCode77——组合★★
19.2.3 LeetCode40——组合总和Ⅱ★★
19.2.4 LeetCode39——组合总和★★
19.2.5 LeetCode90——子集Ⅱ★★
19.2.6 LeetCode216——组合总和Ⅲ★★
19.2.7 LeetCode491——递增子序列★★
19.2.8 LeetCode131——分割回文串★★
19.2.9 LeetCode93——复原IP地址★★
19.2.10 LeetCode282——给表达式添加运算符★★★
19.2.11 LeetCode22——括号的生成★★
19.2.12 LeetCode301——删除无效的括号★★★
19.2.13 LeetCode17——电话号码的字母组合★★
19.2.14 LeetCode79——单词的搜索★★
19.2.15 LeetCode797——所有可能的路径★★
19.2.16 LeetCode332——重新安排行程★★★
19.2.17 LeetCode37——解数独★★★
19.2.18 LeetCode679——24点游戏★★★
19.2.19 LeetCode1723——完成所有工作的最短时间★★★
19.3 排列树的回溯算法设计
19.3.1 LeetCode46——全排列★★
19.3.2 LeetCode47——全排列Ⅱ★★
19.3.3 LeetCode60——排列序列★★★
19.3.4 LeetCode51——n皇后★★★
推荐练习题
第20章 分支限界法和A~*算法
20.1 分支限界法和A~*算法概述
20.1.1 分支限界法
20.1.2 A~*算法
20.2 队列式分支限界法应用的算法设计
20.2.1 LeetCode1376——通知所有员工所需的时间★★
20.2.2 LeetCode743——网络延迟时间★★
20.2.3 LeetCode787——k站中转内最便宜的航班★★
20.2.4 LeetCode1293——网格中的最短路径★★★
20.2.5 LeetCode1102——得分最高的路径★★
20.3 优先队列式分支限界法应用的算法设计
20.3.1 LeetCode743——网络延迟时间★★
20.3.2 LeetCode787——k站中转内最便宜的航班★★
20.3.3 LeetCode1293——网格中的最短路径★★★
20.3.4 LeetCode2473——购买苹果的最低成本★★
20.3.5 LeetCode1102——得分最高的路径★★
20.3.6 LeetCode1723——完成所有工作的最短时间★★★
20.4 A~*算法的应用
20.4.1 LeetCode773——滑动谜题★★★
20.4.2 LeetCode752——打开转盘锁★★
20.4.3 LeetCode1091——二进制矩阵中的最短路径★★
推荐练习题
第21章 动态规划
21.1 动态规划概述
21.1.1 什么是动态规划
21.1.2 动态规划求解问题的类型、性质和步骤
21.2 坐标型动态规划
21.2.1 什么是坐标型动态规划
21.2.2 LeetCode62——不同路径★★
21.2.3 LeetCode63——不同路径Ⅱ★★
21.2.4 LeetCode64——最小路径和★★
21.2.5 LeetCode1289——下降路径最小和Ⅱ★★★
21.2.6 LeetCode329——矩阵中的最长递增路径★★★
21.2.7 LeetCode174——地下城游戏★★★
21.3 序列型动态规划
21.3.1 什么是序列型动态规划
21.3.2 LeetCode300——最长递增子序列★★
21.3.3 LeetCode674——最长连续递增子序列★
21.3.4 LeetCode2393——严格递增的子数组的个数★★
21.3.5 LeetCode491——递增子序列★★
21.3.6 LeetCode646——最长数对链★★
21.3.7 LeetCode1062——最长重复子串★★
21.3.8 LeetCode2008——出租车的最大盈利★★
21.3.9 LeetCode718——最长重复子数组★★
21.3.10 LeetCode1143——最长公共子序列★★
21.3.11 LeetCode392——判断子序列★
21.3.12 LeetCode115——不同的子序列★★★
21.3.13 LeetCode1537——最大得分★★★
21.3.14 LeetCode2361——乘坐火车的最少费用★★★
21.3.15 LeetCode956——最高的广告牌★★★
21.4 划分型动态规划
21.4.1 什么是划分型动态规划
21.4.2 LeetCode639——解码方法Ⅱ★★★
21.4.3 LeetCode279——完全平方数★★
21.4.4 LeetCode343——整数的拆分★★
21.5 匹配型动态规划
21.5.1 什么是匹配型动态规划
21.5.2 LeetCode140——单词的拆分Ⅱ★★★
21.5.3 LeetCode32——最长的有效括号子串的长度★★★
21.5.4 LeetCode44——通配符匹配★★★
21.5.5 LeetCode10——正则表达式匹配★★★
21.6 背包型动态规划
21.6.1 什么是背包型动态规划
21.6.2 LeetCode416——分割等和子集★★
21.6.3 LeetCode494——目标和★★
21.6.4 LeetCode474——一和零★★
21.6.5 LeetCode879——盈利计划★★★
21.6.6 LeetCode871——最少加油次数★★★
21.6.7 LeetCode322——零钱兑换★★
21.6.8 LeetCode518——零钱兑换Ⅱ★★
21.6.9 LeetCode377——组合总和Ⅳ★★
21.7 树型动态规划
21.7.1 什么是树型动态规划
21.7.2 LeetCode834——树中距离之和★★★
21.7.3 LeetCode124——二叉树中的最大路径和★★★
21.7.4 LeetCode337——小偷一晚能够盗取的最大金额Ⅲ★★
21.8 区间型动态规划
21.8.1 什么是区间型动态规划
21.8.2 LeetCode516——最长回文子序列★★
21.8.3 LeetCode664——奇怪的打印机★★★
21.8.4 LeetCode375——猜数字大小Ⅱ★★
21.8.5 LeetCode312——戳气球★★★
21.8.6 LeetCode1000——合并石头的最低成本★★★
21.9 Floyd算法及其应用
21.9.1 Floyd算法
21.9.2 LeetCode1462——课程安排Ⅳ★★
21.9.3 LeetCode2608——图中的最短环★★★
21.9.4 LeetCode847——访问所有结点的最短路径★★★
推荐练习题
第22章 贪心法
22.1 贪心法概述
22.1.1 什么是贪心法
22.1.2 贪心法求解问题具有的性质
22.1.3 贪心法求解问题的一般过程及其优点
22.2 常见的贪心法求解问题
22.2.1 LeetCode455——分发饼干★
22.2.2 LeetCode881——救生船★★
22.2.3 LeetCode871——最少加油次数★★★
22.2.4 LeetCode2895——最少处理时间★★
22.2.5 LeetCode300——最长递增子序列★★
22.2.6 LeetCode354——俄罗斯套娃信封问题★★★
22.2.7 LeetCode1196——最多可以买到的苹果数量★
22.2.8 LeetCode179——最大数★★
22.2.9 LeetCode402——移掉k位数字★★
22.2.10 LeetCode1921——消灭怪物的最多数量★★
22.2.11 LeetCode502——IPO★★★
22.2.12 LeetCode1199——建造街区的最短时间★★★
22.3 区间问题
22.3.1 什么是区间问题
22.3.2 LeetCode435——无重叠区间★★
22.3.3 LeetCode452——用最少的箭击破气球★★
22.3.4 LeetCode56——合并区间★★
22.3.5 LeetCode1024——视频的拼接★★
22.3.6 LeetCode253——会议室Ⅱ★★
22.4 Prim和Kruskal算法及其应用
22.4.1 Prim和Kruskal算法
22.4.2 LeetCode1584——连接所有点的最少费用★★
22.4.3 LeetCode1168——水资源的分配优化★★★
22.5 Dijkstra算法及其应用
22.5.1 Dijkstra算法
22.5.2 LeetCode1631——消耗体力最少的路径★★
22.5.3 LeetCode1102——得分最高的路径★★
22.5.4 LeetCode2093——前往目标城市的最少费用★★
22.5.5 LeetCode787——k站中转内最便宜的航班★★
推荐练习题
第三部分 经典问题及其求解
第23章 跳跃问题
23.1 跳跃问题概述
23.2 跳跃问题的求解
23.2.1 LeetCode45——跳跃游戏Ⅱ★★
23.2.2 LeetCode55——跳跃游戏★★
23.2.3 LeetCode1871——跳跃游戏Ⅶ★★
23.2.4 LeetCode1306——跳跃游戏Ⅲ★★
23.2.5 LeetCode1345——跳跃游戏Ⅳ★★★
23.2.6 LeetCode1654——到家的最少跳跃次数★★
推荐练习题
第24章 迷宫问题
24.1 迷宫问题概述
24.2 迷宫问题的求解
24.2.1 LeetCode490——迷宫★★
24.2.2 LeetCode505——迷宫Ⅱ★★
24.2.3 LeetCode499——迷宫Ⅲ★★★
推荐练习题
第25章 设计问题
25.1 设计问题概述
25.2 常见设计问题的求解
25.2.1 LeetCode380——O(1)时间插入、删除和获取随机元素★★
25.2.2 LeetCode381——O(1)时间插入、删除和获取随机元素(可重复)★★★
25.2.3 LeetCode432——全O(1)的数据结构★★★
25.2.4 LeetCode295——数据流的中位数★★★
推荐练习题
附录A LeetCode题目及其章号索引表
附录B 《算法面试》配套LeetCode平台使用说明
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜