第二部分算法设计策略及其应用
第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皇后★★★