150道基础算法分类总结(2022)

在刷了一部分leetcode算法题之后,想要回头系统复习一下,发现刷的比较乱,特此整理一下,方便后续二刷,主要是对各种类型算法的一个分类,以及比较典型的题目的整理。

60道需要掌握,90道需要练习。

学习说明

  1. 题目来源LeetCode
  2. 参考代码是用Java写的
  3. 供自己方便学习

算法分类

1. 二叉树

树也是一种非常重要的数据结构,因为很多容器的底层都设计到树,所以树也成了面试常问的重点了。特别是二叉树及二叉搜索树的算法

二叉树的问题相对简单,要灵活掌握递归和迭代的实现方法。以下7道题需要掌握以及18道扩展练习(7 + 18)。

二叉树的考点 题目来源 扩展 题解参考
二叉树的遍历
(递归和迭代实现)
102. 二叉树的层序遍历 144. 前序遍历
94. 中序遍历
145. 后序遍历
199. 二叉树的右视图
算法分析之二叉树遍历
二叉树属性问题 104. 二叉树的最大深度 111. 二叉树的最小深度
513. 找树左下角的值
112. 路径总和
110. 平衡二叉树
257. 二叉树的所有路径
算法分析之二叉树常见问题
二叉树子树问题 572. 另一棵树的子树 100. 相同的树 LeetCode官方题解(三种方法)
二叉树改造问题 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树
617. 合并二叉树
654. 最大二叉树
算法分析之二叉树常见问题
二叉树公共祖先问题 236. 二叉树的最近公共祖先 235. 二叉搜索树的最近公共祖先 算法分析之二叉树常见问题
二叉搜索树属性问题 98. 验证二叉搜索树 530. 二叉搜索树的最小绝对差
501. 二叉搜索树中的众数
538. 把二叉搜索树转换为累加树
算法分析之二叉树常见问题
二叉搜索树改造问题 108. 将有序数组转换为二叉搜索树 669. 修剪二叉搜索树 算法分析之二叉树常见问题

2. 动态规划dp

dp说简单也简单,说难也实在是太难了,重点是如何找到里面的状态转移方程。但dp是面试比较频繁的考点,需要灵活掌握,遇到dp问题时怎么快速找到转移方程。

以下12道题需要掌握以及19道扩展练习(12 + 19)。

动态规划的考点 题目来源 扩展 题解参考
01背包问题 474. 一和零 416. 分割等和子集
494. 目标和
动态规划之背包问题——01背包
完全背包 518. 零钱兑换 II
377. 组合总和 Ⅳ
322. 零钱兑换 动态规划之背包问题——完全背包
打家劫舍 198. 打家劫舍 213. 打家劫舍 II
337. 打家劫舍 III
动态规划之打家劫舍系列问题
股票买卖 121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II
123. 买卖股票的最佳时机 III
188. 买卖股票的最佳时机 IV
309. 最佳买卖股票时机含冷冻期
714. 买卖股票的最佳时机含手续费
动态规划之股票买卖系列问题
子序列 300. 最长递增子序列
674. 最长连续递增序列
1035. 不相交的线
1143. 最长公共子序列
53. 最大子数组和
动态规划之子序列问题
编辑距离 72. 编辑距离 115. 不同的子序列
583. 两个字符串的删除操作
动态规划之子序列问题
回文串 516. 最长回文子序列 647. 回文子串 动态规划之子序列问题
常规dp 509. 斐波那契数
221. 最大正方形
42. 接雨水
746. 使用最小花费爬楼梯
96. 不同的二叉搜索树
887. 鸡蛋掉落
接雨水问题——动态规划+单调栈
鸡蛋掉落问题——动态规划应用问题

3. 搜索类(DFS,BFS,回溯,暴力搜索)

搜索类算法题是比较常见的题型。DFS,BFS,回溯算法都需要掌握,暴力搜索也是最基本的最暴力的搜索方法。回溯三部曲加剪枝是非常重要的理解方法。下面对搜索类算法题的一个汇总。

以下8道题需要掌握以及12道扩展练习(8 + 12)。

搜索算法的考点 题目来源 扩展 题解参考
排列问题 46. 全排列 47. 全排列 II Java实现回溯算法入门(排列+组合+子集)
组合问题 77. 组合 39. 组合总和
40. 组合总和 II
216. 组合总和 III
Java实现回溯算法入门(排列+组合+子集)
子集问题 78. 子集 90. 子集 II Java实现回溯算法入门(排列+组合+子集)
搜索问题 79. 单词搜索
130. 被围绕的区域
200. 岛屿数量
22. 括号生成
212. 单词搜索 II
113. 路径总和 II
542. 01 矩阵
1391. 检查网格中是否存在有效路径
1036. 逃离大迷宫
剑指 Offer 13. 机器人的运动范围
Java实现回溯算法进阶(搜索)
多源BFS 1162. 地图分析 1765. 地图中的最高点 图论搜索:如何使用多源BFS降低时间复杂度

4. 容器类(哈希表,栈,队列,Map,Set)

容器类的算法题一般需要根据一些容器的特点来解决响应的问题,还有需要选择合适的容器进行新的数据结构的设计,掌握它们的使用。最常用的容器主要包括栈(Stack),队列(Queue),哈希表(HashMap),集合(Set)

以下9道题需要掌握以及12道扩展练习(9 + 12)。

容器类算法的考点 题目来源 扩展 题解参考
栈和队列的实现 232. 用栈实现队列 225. 用队列实现栈 算法分析之栈和队列
栈的经典问题
(栈的应用)
(设计栈)
(单调栈)
150. 逆波兰表达式求值
155. 最小栈
907. 子数组的最小值之和
20. 有效的括号
1047. 删除字符串中的所有相邻重复项
355. 设计推特
1396. 设计地铁系统
算法分析之栈和队列
子数组的最小值之和——单调栈+动态规划
最小栈–辅助最小值栈的维护
队列经典问题 239. 滑动窗口最大值 347. 前 K 个高频元素 算法分析之栈和队列
滑动窗口的最大值——单调队列
哈希表的实现 706. 设计哈希映射 705. 设计哈希集合 设计哈希集合(HashSet)、哈希映射(HashMap)
数组作为哈希表 242. 有效的字母异位词 383. 赎金信 算法分析之哈希表
Map作为哈希表 454. 四数相加 II 1. 两数之和
15. 三数之和
18. 四数之和
算法分析之哈希表
两数之和到三数之和到四数之和——哈希+双指针
Set作为哈希表 349. 两个数组的交集 202. 快乐数 算法分析之哈希表

5. 链表

链表是一种非常常见的数据结构,链表的操作需要掌握,主要是指针的移动,链表的基础操作。

以下6道题需要掌握以及12道扩展练习(6 + 12)。

链表的考点 题目来源 扩展 题解参考
链表的操作 707. 设计链表
206. 反转链表
2. 两数相加
203. 移除链表元素
24. 两两交换链表中的节点
61. 旋转链表
445. 两数相加 II
147. 对链表进行插入排序
83. 删除排序链表中的重复元素
算法分析之链表问题
两两交换链表中的节点–递归解决
旋转链表–巧转循环链表
两数相加 II–用栈翻转链表元素
链表的类型 142. 环形链表 II 141. 环形链表 环形链表
链表的双指针 19. 删除链表的倒数第 N 个结点 876. 链表的中间结点
86. 分隔链表
82. 删除排序链表中的重复元素 II
剑指 Offer 52. 两个链表的第一个公共节点
算法分析之链表问题
分隔链表–双指针操作
删除排序链表中的重复元素 II–链表基础指针操作
合并链表 21. 合并两个有序链表 23. 合并K个升序链表 算法(Java)——链表
合并K个排序链表–优先队列解决

6. 字符串

字符串是贯穿整个算法的内容,是很多题目的基础,字符串与哈希的结合,KMP算法,与双指针的结合,这都是经常会用到的知识。

以下5道题需要掌握以及10道扩展练习(5 + 10)。

字符串的考点 题目来源 扩展 题解参考
常规字符串 748. 最短补全词 1816. 截断句子
1446. 连续字符
8. 字符串转换整数 (atoi)
916. 单词子集
算法分析之字符串
字符串转换整数 (atoi)–java的简单模拟
单词子集–特征思想的运用
双指针法 151. 颠倒字符串中的单词 541. 反转字符串 II
剑指 Offer 58 - II. 左旋转字符串
算法分析之字符串
字符串与哈希 187. 重复的DNA序列 1044. 最长重复子串 算法分析之字符串
KMP算法 459. 重复的子字符串 686. 重复叠加字符串匹配 KMP模式匹配算法详解
算法分析之字符串
字符串前缀 820. 单词的压缩编码 208. 实现 Trie (前缀树)
1392. 最长快乐前缀
前缀树的灵活运用
最长快乐前缀–string_view的神奇用途

7. 数组(贪心,二分)

贪心算法没有固定的算法框架,最好的判断的方法是举反例,如果举不到反例,不妨试一下贪心算法,要注意贪心算法与动态规划的区别。

以下7道题需要掌握以及7道扩展练习(7 + 7)。

数组的考点 题目来源 扩展 题解参考
常规问题 1005. K 次取反后最大化的数组和 860. 柠檬水找零 算法分析之贪心算法
序列问题 376. 摆动序列 738. 单调递增的数字 算法分析之贪心算法
两个维度权衡问题 135. 分发糖果 406. 根据身高重建队列 算法分析之贪心算法
区间问题 55. 跳跃游戏
452. 用最少数量的箭引爆气球
763. 划分字母区间
45. 跳跃游戏 II
435. 无重叠区间
56. 合并区间
算法分析之贪心算法
一般难度问题 134. 加油站 968. 监控二叉树 算法分析之贪心算法

8. 数学思维类(含位运算思想)

数学思维问题,以下6道题需要练习。

数学思维类的考点 题目来源 题解参考
数学思维的运用 289. 生命游戏 生命游戏–附加状态
非常容易出错的面试题 剑指 Offer 16. 数值的整数次方 数值的整数次方–一道题培养你的严密思维
空间思想解决算法问题 892. 三维形体的表面积 三维形体的表面积–算法中的几何思想
短路原则 剑指 Offer 64. 求1+2+…+n 求 1+2+…+n --有趣的短路原则
数学思维找规律 剑指 Offer 43. 1~n 整数中 1 出现的次数 1~n整数中1出现的次数–最高效率的解法
分组异或 剑指 Offer 56 - I. 数组中数字出现的次数 数组中数字出现的次数–分组异或

你可能感兴趣的:(算法分析,算法,leetcode,二叉树,动态规划,回溯)