目录 扫一扫 配套资源 第二部分算法设计策略及其应用 第15章穷举法 15.1穷举法概述 15.1.1什么是穷举法 15.1.2顺序列举设计方法 15.1.3组合列举设计方法 15.1.4排列列举设计方法 15.2顺序列举的算法设计 15.2.1LeetCode485——1的最多连续个数★ 15.2.2LeetCode1464——数组中两个元素的最大乘积★ 15.2.3LeetCode829——连续整数求和★★★ 15.2.4LeetCode17——电话号码的字母组合★★ 15.2.5LeetCode845——数组中的最长山脉★★ 15.2.6LeetCode209——长度最小的子数组★★ 15.2.7LeetCode134——加油站★★ 15.3组合列举的算法设计 15.3.1LeetCode78——子集★★ 15.3.2LeetCode90——子集Ⅱ★★ 15.3.3LeetCode77——组合★★ 15.3.4LeetCode1863——求出所有子集的异或总和再求和★ 15.4排列列举的算法设计 15.4.1LeetCode46——全排列★★ 15.4.2LeetCode60——排列序列★★★ 15.4.3LeetCode52——n皇后Ⅱ★★★ 推荐练习题 第16章递归 16.1递归概述 16.1.1递归的定义 16.1.2递归模型 16.1.3递归的执行过程 16.1.4递归算法的设计 16.1.5使用递归的注意事项 16.2基于递归数据结构的递归算法设计 16.2.1LeetCode2487——从链表中移除结点★★ 16.2.2LeetCode21——合并两个有序链表★ 16.2.3LeetCode814——二叉树的剪支★★ 16.2.4LeetCode236——二叉树的最近公共祖先★★ 16.2.5LeetCode114——将二叉树展开为链表★★ 16.3基于归纳的递归算法设计 16.3.1LeetCode17——电话号码的字母组合★★ 16.3.2LeetCode191——位1的个数★ 16.3.3LeetCode231——2的幂★ 16.3.4LeetCode394——字符串解码★★ 推荐练习题 第17章分治法 17.1分治法概述 17.1.1什么是分治法 17.1.2二分查找及其扩展算法 17.2基本分治算法设计 17.2.1LeetCode169——多数元素★ 17.2.2LeetCode53——最大子数组和★★ 17.2.3LeetCode241——为运算表达式设计优先级★★ 17.2.4LeetCode95——不同的二叉搜索树Ⅱ★★ 17.3快速排序和二路归并排序应用的算法设计 17.3.1LeetCode912——排序数组★★ 17.3.2LeetCode215——数组中第k大的元素★★ 17.3.3LeetCode315——计算右侧小于当前元素的个数★★★ 17.3.4LeetCode493——翻转对★★★ 17.4二分查找应用的算法设计 17.4.1LeetCode69——x的平方根★ 17.4.2LeetCode167——有序数组中的两数之和Ⅱ★★ 17.4.3LeetCode74——搜索二维矩阵★★ 17.4.4LeetCode4——寻找两个正序数组的中位数★★★ 17.4.5LeetCode744——寻找比目标字母大的最小字母★ 17.4.6LeetCode153——寻找旋转排序数组中的最小值★★ 17.4.7LeetCode33——搜索旋转排序数组★★ 17.4.8LeetCode81——搜索旋转排序数组Ⅱ★★ 17.4.9LeetCode315——计算右侧小于当前元素的个数★★★ 17.4.10LeetCode493——翻转对★★★ 17.4.11LeetCode215——数组中第k大的元素★★ 17.4.12LeetCode378——有序矩阵中第k小的元素★★ 17.4.13LeetCode410——分割数组的最大值★★★ 17.4.14LeetCode1011——在D天内送达包裹的能力★★ 推荐练习题 第18章DFS、BFS和拓扑排序 18.1DFS、BFS和拓扑排序概述 18.1.1深度优先搜索 18.1.2广度优先搜索 18.1.3拓扑排序 18.2深度优先遍历应用的算法设计 18.2.1LeetCode200——岛屿的数量★★ 18.2.2LeetCode463——岛屿的周长★ 18.2.3LeetCode130——被围绕的区域★★ 18.2.4LeetCode529——扫雷游戏★★ 18.2.5LeetCode365——水壶问题★★ 18.2.6LeetCode332——重新安排行程★★★ 18.3广度优先遍历应用的算法设计 18.3.1LeetCode200——岛屿的数量★★ 18.3.2LeetCode130——被围绕的区域★★ 18.3.3LeetCode529——扫雷游戏★★ 18.3.4LeetCode365——水壶问题★★ 18.3.5LeetCode1162——地图分析★★ 18.3.6LeetCode847——访问所有结点的最短路径★★★ 18.3.7LeetCode2608——图中的最短环★★★ 18.3.8LeetCode2204——无向图中到环的距离★★★ 18.3.9LeetCode127——单词接龙★★★ 18.3.10LeetCode934——最短的桥★★ 18.4拓扑排序应用的算法设计 18.4.1LeetCode1462——课程安排Ⅳ★★ 18.4.2LeetCode802——找到最终的安全状态★★ 18.4.3LeetCode269——火星词典★★★ 推荐练习题 第19章回溯法 19.1回溯法概述 19.1.1什么是回溯法 19.1.2回溯法的算法设计 19.2子集树的回溯算法设计 19.2.1LeetCode78——子集★★ 19.2.2LeetCode77——组合★★ 19.2.3LeetCode40——组合总和Ⅱ★★ 19.2.4LeetCode39——组合总和★★ 19.2.5LeetCode90——子集Ⅱ★★ 19.2.6LeetCode216——组合总和Ⅲ★★ 19.2.7LeetCode491——递增子序列★★ 19.2.8LeetCode131——分割回文串★★ 19.2.9LeetCode93——复原IP地址★★ 19.2.10LeetCode282——给表达式添加运算符★★★ 19.2.11LeetCode22——括号的生成★★ 19.2.12LeetCode301——删除无效的括号★★★ 19.2.13LeetCode17——电话号码的字母组合★★ 19.2.14LeetCode79——单词的搜索★★ 19.2.15LeetCode797——所有可能的路径★★ 19.2.16LeetCode332——重新安排行程★★★ 19.2.17LeetCode37——解数独★★★ 19.2.18LeetCode679——24点游戏★★★ 19.2.19LeetCode1723——完成所有工作的最短时间★★★ 19.3排列树的回溯算法设计 19.3.1LeetCode46——全排列★★ 19.3.2LeetCode47——全排列Ⅱ★★ 19.3.3LeetCode60——排列序列★★★ 19.3.4LeetCode51——n皇后★★★ 推荐练习题 第20章分支限界法和A*算法 20.1分支限界法和A*算法概述 20.1.1分支限界法 20.1.2A*算法 20.2队列式分支限界法应用的算法设计 20.2.1LeetCode1376——通知所有员工所需的时间★★ 20.2.2LeetCode743——网络延迟时间★★ 20.2.3LeetCode787——k站中转内最便宜的航班★★ 20.2.4LeetCode1293——网格中的最短路径★★★ 20.2.5LeetCode1102——得分最高的路径★★ 20.3优先队列式分支限界法应用的算法设计 20.3.1LeetCode743——网络延迟时间★★ 20.3.2LeetCode787——k站中转内最便宜的航班★★ 20.3.3LeetCode1293——网格中的最短路径★★★ 20.3.4LeetCode2473——购买苹果的最低成本★★ 20.3.5LeetCode1102——得分最高的路径★★ 20.3.6LeetCode1723——完成所有工作的最短时间★★★ 20.4A*算法的应用 20.4.1LeetCode773——滑动谜题★★★ 20.4.2LeetCode752——打开转盘锁★★ 20.4.3LeetCode1091——二进制矩阵中的最短路径★★ 推荐练习题 第21章动态规划 21.1动态规划概述 21.1.1什么是动态规划 21.1.2动态规划求解问题的类型、性质和步骤 21.2坐标型动态规划 21.2.1什么是坐标型动态规划 21.2.2LeetCode62——不同路径★★ 21.2.3LeetCode63——不同路径Ⅱ★★ 21.2.4LeetCode64——最小路径和★★ 21.2.5LeetCode1289——下降路径最小和Ⅱ★★★ 21.2.6LeetCode329——矩阵中的最长递增路径★★★ 21.2.7LeetCode174——地下城游戏★★★ 21.3序列型动态规划 21.3.1什么是序列型动态规划 21.3.2LeetCode300——最长递增子序列★★ 21.3.3LeetCode674——最长连续递增子序列★ 21.3.4LeetCode2393——严格递增的子数组的个数★★ 21.3.5LeetCode491——递增子序列★★ 21.3.6LeetCode646——最长数对链★★ 21.3.7LeetCode1062——最长重复子串★★ 21.3.8LeetCode2008——出租车的最大盈利★★ 21.3.9LeetCode718——最长重复子数组★★ 21.3.10LeetCode1143——最长公共子序列★★ 21.3.11LeetCode392——判断子序列★ 21.3.12LeetCode115——不同的子序列★★★ 21.3.13LeetCode1537——最大得分★★★ 21.3.14LeetCode2361——乘坐火车的最少费用★★★ 21.3.15LeetCode956——最高的广告牌★★★ 21.4划分型动态规划 21.4.1什么是划分型动态规划 21.4.2LeetCode639——解码方法Ⅱ★★★ 21.4.3LeetCode279——完全平方数★★ 21.4.4LeetCode343——整数的拆分★★ 21.5匹配型动态规划 21.5.1什么是匹配型动态规划 21.5.2LeetCode140——单词的拆分Ⅱ★★★ 21.5.3LeetCode32——最长的有效括号子串的长度★★★ 21.5.4LeetCode44——通配符匹配★★★ 21.5.5LeetCode10——正则表达式匹配★★★ 21.6背包型动态规划 21.6.1什么是背包型动态规划 21.6.2LeetCode416——分割等和子集★★ 21.6.3LeetCode494——目标和★★ 21.6.4LeetCode474——一和零★★ 21.6.5LeetCode879——盈利计划★★★ 21.6.6LeetCode871——最少加油次数★★★ 21.6.7LeetCode322——零钱兑换★★ 21.6.8LeetCode518——零钱兑换Ⅱ★★ 21.6.9LeetCode377——组合总和Ⅳ★★ 21.7树型动态规划 21.7.1什么是树型动态规划 21.7.2LeetCode834——树中距离之和★★★ 21.7.3LeetCode124——二叉树中的最大路径和★★★ 21.7.4LeetCode337——小偷一晚能够盗取的最大金额Ⅲ★★ 21.8区间型动态规划 21.8.1什么是区间型动态规划 21.8.2LeetCode516——最长回文子序列★★ 21.8.3LeetCode664——奇怪的打印机★★★ 21.8.4LeetCode375——猜数字大小Ⅱ★★ 21.8.5LeetCode312——戳气球★★★ 21.8.6LeetCode1000——合并石头的最低成本★★★ 21.9Floyd算法及其应用 21.9.1Floyd算法 21.9.2LeetCode1462——课程安排Ⅳ★★ 21.9.3LeetCode2608——图中的最短环★★★ 21.9.4LeetCode847——访问所有结点的最短路径★★★ 推荐练习题 第22章贪心法 22.1贪心法概述 22.1.1什么是贪心法 22.1.2贪心法求解问题具有的性质 22.1.3贪心法求解问题的一般过程及其优点 22.2常见的贪心法求解问题 22.2.1LeetCode455——分发饼干★ 22.2.2LeetCode881——救生船★★ 22.2.3LeetCode871——最少加油次数★★★ 22.2.4LeetCode2895——最少处理时间★★ 22.2.5LeetCode300——最长递增子序列★★ 22.2.6LeetCode354——俄罗斯套娃信封问题★★★ 22.2.7LeetCode1196——最多可以买到的苹果数量★ 22.2.8LeetCode179——最大数★★ 22.2.9LeetCode402——移掉k位数字★★ 22.2.10LeetCode1921——消灭怪物的最多数量★★ 22.2.11LeetCode502——IPO★★★ 22.2.12LeetCode1199——建造街区的最短时间★★★ 22.3区间问题 22.3.1什么是区间问题 22.3.2LeetCode435——无重叠区间★★ 22.3.3LeetCode452——用最少的箭击破气球★★ 22.3.4LeetCode56——合并区间★★ 22.3.5LeetCode1024——视频的拼接★★ 22.3.6LeetCode253——会议室Ⅱ★★ 22.4Prim和Kruskal算法及其应用 22.4.1Prim和Kruskal算法 22.4.2LeetCode1584——连接所有点的最少费用★★ 22.4.3LeetCode1168——水资源的分配优化★★★ 22.5Dijkstra算法及其应用 22.5.1Dijkstra算法 22.5.2LeetCode1631——消耗体力最少的路径★★ 22.5.3LeetCode1102——得分最高的路径★★ 22.5.4LeetCode2093——前往目标城市的最少费用★★ 22.5.5LeetCode787——k站中转内最便宜的航班★★ 推荐练习题 第三部分经典问题及其求解 第23章跳跃问题 23.1跳跃问题概述 23.2跳跃问题的求解 23.2.1LeetCode45——跳跃游戏Ⅱ★★ 23.2.2LeetCode55——跳跃游戏★★ 23.2.3LeetCode1871——跳跃游戏Ⅶ★★ 23.2.4LeetCode1306——跳跃游戏Ⅲ★★ 23.2.5LeetCode1345——跳跃游戏Ⅳ★★★ 23.2.6LeetCode1654——到家的最少跳跃次数★★ 推荐练习题 第24章迷宫问题 24.1迷宫问题概述 24.2迷宫问题的求解 24.2.1LeetCode490——迷宫★★ 24.2.2LeetCode505——迷宫Ⅱ★★ 24.2.3LeetCode499——迷宫Ⅲ★★★ 推荐练习题 第25章设计问题 25.1设计问题概述 25.2常见设计问题的求解 25.2.1LeetCode380——O(1)时间插入、删除和获取随机元素★★ 25.2.2LeetCode381——O(1)时间插入、删除和获取随机元素(可 重复)★★★ 25.2.3LeetCode432——全O(1)的数据结构★★★ 25.2.4LeetCode295——数据流的中位数★★★ 推荐练习题 附录ALeetCode题目及其章号索引表 附录B《算法面试》配套LeetCode平台使用说明