目录

扫一扫


配套资源




第二部分算法设计策略及其应用

第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平台使用说明