Skip to content

Latest commit

 

History

History
506 lines (366 loc) · 11.5 KB

CodingLog.md

File metadata and controls

506 lines (366 loc) · 11.5 KB

算法coding

labuladong算法

4.28 滑动窗口 4t 1天

labuladong算法:滑动窗口

76. 最小覆盖子串
567. 字符串的排列 
438. 找到字符串中所有字母异位词
3. 无重复字符的最长子串

4.29 动态规划 16 3天

labuladong算法:动态规划 16 3天

300. 最长递增子序列
354. 俄罗斯套娃信封问题
53. 最大子数组和
1143. 最长公共子序列
72. 编辑距离
516. 最长回文子序列
1312. 让字符串成为回文串的最少插入次数
10. 正则表达式匹配
651. 4键键盘✨
887. 鸡蛋掉落
312. 戳气球
416. 分割等和子集 子集背包 0-1背包
518. 零钱兑换 II 完全背包  
198. 打家劫舍
213. 打家劫舍 II
337. 打家劫舍 III
494. 目标和

5.2 数据结构 21 3天

labuladong算法:数据结构 21 3天

操作系统 页面置换
146. LRU 缓存
460. LFU 缓存

二叉搜索树
98. 验证二叉搜索树
700. 二叉搜索树中的搜索
701. 二叉搜索树中的插入操作
450. 删除二叉搜索树中的节点

如何计算完全二叉树的节点数
222. 完全二叉树的节点个数
序列化与反序列化
297. 二叉树的序列化与反序列化

二叉树的最近公共祖先 Lowest Common Ancestor,LCA
236. 二叉树的最近公共祖先 (两个节点 的LCA)
1676. 二叉树的最近公共祖先 IV✨ (若干节点 的LCA)
1644. 二叉树的最近公共祖先 II✨ (两个节点 的LCA,但两个节点可能不存在于树中)
235. 二叉搜索树的最近公共祖先 (两个节点 的LCA,但二叉搜索树可以优化)
1650. 二叉树的最近公共祖先 III✨ (两个节点 的LCA,但二叉树节点包含指向父节点的指针,实际变成了单链表第一个相交节点问题)

单调栈、单调队列
496. 下一个更大元素 I
739. 每日温度
503. 下一个更大元素 II
239. 滑动窗口最大值

链表
234. 回文链表
206. 反转链表
92. 反转链表 II
25. K 个一组翻转链表

5.4 算法思维 20 4天

labuladong算法:算法思维 20 4天

排列/组合/子集问题
78. 子集 (元素无重不可复选)
77. 组合 (元素无重不可复选)
216. 组合总和 III (元素无重不可复选)
46. 全排列 (元素无重不可复选)
90. 子集 II (元素可重不可复选) 有重复元素,排序 去重复 子集、组合、排列
40. 组合总和 II	(元素可重不可复选)
47. 全排列 II (元素可重不可复选)
39. 组合总和 (元素无重可复选)

回溯算法最佳实践
37. 解数独
22. 括号生成

BFS 智力题
773. 滑动谜题

NSUM 问题
1. 两数之和
167. 两数之和 II - 输入有序数组
15. 三数之和
18. 四数之和

计算器
224. 基本计算器
227. 基本计算器 II
772. 基本计算器 III✨

969. 煎饼排序
560. 和为 K 的子数组
341. 扁平化嵌套列表迭代器

5.8 面试高频题 6天

labuladong算法:面试高频题 26 6天

数学
204. 计数质数
372. 超级次方

二分
875. 爱吃香蕉的珂珂
1011. 在 D 天内送达包裹的能力
410. 分割数组的最大值

接雨水
42. 接雨水
11. 盛最多水的容器

双指针
26. 删除有序数组中的重复项
83. 删除排序链表中的重复元素
27. 移除元素
283. 移动零
344. 反转字符串
5. 最长回文子串

贪心
55. 跳跃游戏
45. 跳跃游戏 II
435. 无重叠区间
452. 用最少数量的箭引爆气球

括号
20. 有效的括号
921. 使括号有效的最少添加
1541. 平衡括号字符串的最少插入次数	

并查集
323. 无向图中连通分量的数目🔒
130. 被围绕的区域
990. 等式方程的可满足性

博弈论
292. Nim 游戏
877. 石子游戏
319. 灯泡开关

代码随想录

5.14 数组 14t 3天

二分
35. 搜索插入位置
34. 在排序数组中查找元素的第一个和最后一个位置
69. x 的平方根 
367. 有效的完全平方数

移除元素
27. 移除元素
26. 删除排序数组中的重复项
283. 移动零
844. 比较含退格的字符串
977. 有序数组的平方

滑动窗口
209. 长度最小的子数组
904. 水果成篮
76. 最小覆盖子串

螺旋矩阵
59. 螺旋矩阵II
54. 螺旋矩阵(剑指Offer 29.顺时针打印矩阵)

5.17 链表 7t 1天

203. 移除链表元素
707. 设计链表
206. 反转链表
24. 两两交换链表中的节点
19. 删除链表的倒数第N个节点
面试题 02.07. 链表相交
142. 环形链表II

5.18 哈希 9t 1天

异位词
242. 有效的字母异位词
49. 字母异位词分组
438. 找到字符串中所有字母异位词

交集
349. 两个数组的交集
350. 两个数组的交集 II

之和
1. 两数之和(一个数组)
454. 四数相加II(四个数组)

202. 快乐数
383. 赎金信

5.19 字符串 7t 2天

反转字符串
344. 反转字符串
541. 反转字符串II
151. 颠倒字符串中的单词(先整体反转再局部反转)
剑指Offer58-II. 左旋转字符串(先局部反转再 整体反转)

剑指Offer 05. 替换空格

KMP
28. 实现 strStr() 
459. 重复的子字符串

5.21 栈与队列 8t 1天

232. 用栈实现队列
225. 用队列实现栈

栈
71. 简化路径
20. 有效的括号
1047. 删除字符串中的所有相邻重复项
150. 逆波兰表达式求值

队列
239. 滑动窗口最大值(单调队列)
347. 前 K 个高频元素(优先队列)

5.22 二叉树 42t 7天

深度优先遍历
144. 二叉树的前序遍历
145. 二叉树的后序遍历
94. 二叉树的中序遍历
589. N叉树的前序遍历
590. N叉树的后序遍历

层序遍历(广度优先遍历)
102. 二叉树的层序遍历
107. 二叉树的层次遍历II
199. 二叉树的右视图
637. 二叉树的层平均值
429. N叉树的层序遍历
515. 在每个树行中找最大值
116. 填充每个节点的下一个右侧节点指针
117. 填充每个节点的下一个右侧节点指针II
104. 二叉树的最大深度
111. 二叉树的最小深度
559. n叉树的最大深度

226. 翻转二叉树

对称
101. 对称二叉树
100. 相同的树
572. 另一个树的子树

基本功题,不需要全遍历,利用完全二叉树定义的性质
222. 完全二叉树的节点个数

遍历所有节点
110. 平衡二叉树 (深度先序、高度后序)
257. 二叉树的所有路径
113. 路径总和ii 找所有路径 无需返回值

找特殊节点
404. 左叶子之和
513. 找树左下角的值
112. 路径总和 找一条路径 可以有返回值

构造二叉树
106. 从中序与后序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树
654. 最大二叉树

617. 合并二叉树

二叉搜索树
700. 二叉搜索树中的搜索 (定义题)
98. 验证二叉搜索树
530. 二叉搜索树的最小绝对差
501. 二叉搜索树中的众数
701. 二叉搜索树中的插入操作
450. 删除二叉搜索树中的节点
669. 修剪二叉搜索树
108. 将有序数组转换为二叉搜索树
538. 把二叉搜索树转换为累加树

LCA 最近公共祖先
236. 二叉树的最近公共祖先
235. 二叉搜索树的最近公共祖先

5.29 回溯 15t 3天

组合问题:N个数里面按一定规则找出k个数的集合 $O(n × 2^n)$,组合问题其实就是一种子集的问题,所以组合问题最坏的情况,也不会超过子集问题的时间复杂度。 $O(C_n^k)$
77. 组合 (一个集合,选 k 个元素)
216. 组合总和III (一个集合,选 k 个元素,和77不同在多了一个总和的限制)
17. 电话号码的字母组合 (多个集合,一个集合用 startIndex,多个集合从 0 开始)
39. 组合总和 (一个集合,元素可被重复选取,只有总和限制)
40. 组合总和II (一个集合,集合中元素可能有重复,只有总和限制,难点在于集合中有重复元素,但结果中不能有重复的组合,排序去重)

分割问题:一个字符串按一定规则有几种切割方式(组合问题)
131. 分割回文串 (不一定分多少段)
93. 复原IP地址 (分成 4 段)

组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!

子集问题:一个N个数的集合里有多少符合条件的子集,求取子集问题,不需要任何剪枝!因为子集就是要遍历整棵树。 $O(n × 2^n)$
78. 子集 (一个集合的所有子集)
90. 子集II (一个集合,集合中元素可能有重复,但结果中不能有重复的子集,排序去重)
491. 递增子序列 (一个序列(不能排序),序列中元素可能有重复,但结果中不能有重复的子序列,找出所有递增子序列,对于树的一层用 HashSet 去重)

排列问题:N个数按一定规则全排列,有几种排列方式 $O(n!)$
46. 全排列 (每次从 0 开始,不用 startIndex,需要 visit 数组记录是否访问过)
47. 全排列 II (集合中元素可能有重复,但结果中不能有重复的排列)
332. 重新安排行程 (一种排列)

棋盘问题:N皇后,解数独等等(排列问题)
51. N皇后
37. 解数独

6.2 贪心 18t 4天

常识感觉题
455. 分发饼干
1005. K 次取反后最大化的数组和
860. 柠檬水找零

贪心,动态规划都能实际的做出来,思考方向不一样
53. 最大子数组和
376. 摆动序列
贪心解决股票问题
122. 买卖股票的最佳时机 II
714. 买卖股票的最佳时机含手续费

区间问题
跳跃最远距离
55. 跳跃游戏
45. 跳跃游戏 II
无重叠区间(求数量)(end排序)
452. 用最少数量的箭引爆气球
435. 无重叠区间 (找最多的无重叠区间)
无重叠区间(求区间)(start排序)
763. 划分字母区间 (每次取符合要求的最短的片段,最后得到的片段数就是最多的)
56. 合并区间

两个维度权衡问题
135. 分发糖果
406. 根据身高重建队列

其他
134. 加油站 (贪心降时间复杂度)
738. 单调递增的数字
968. 监控二叉树 (二叉树交叉贪心)

6.6 动态规划

直观题(求解的答案即是dp定义)
509. 斐波那契数
70. 爬楼梯
746. 使用最小花费爬楼梯
62. 不同路径
63. 不同路径 II
343. 整数拆分
96. 不同的二叉搜索树

背包
01背包
问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
416. 分割等和子集
1049. 最后一块石头的重量 II
问装满背包有几种方法:dp[j] += dp[j - nums[i]];
494. 目标和
问背包装满最大价值:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); 
474. 一和零

完全背包
问装满背包有几种方法:dp[j] += dp[j - nums[i]];
518. 零钱兑换 II (求组合数,外物品内背包)
377. 组合总和 Ⅳ (求排列数,外背包内物品)
问装满背包所有物品的最小个数:dp[j] = min(dp[j - coins[i]] + 1, dp[j]); 遍历顺序无所谓
322. 零钱兑换
279. 完全平方数

139. 单词拆分

打家劫舍
198. 打家劫舍
213. 打家劫舍II
337. 打家劫舍III

股票
121. 买卖股票的最佳时机
122. 买卖股票的最佳时机II
123. 买卖股票的最佳时机III
188. 买卖股票的最佳时机IV
309. 最佳买卖股票时机含冷冻期
714. 买卖股票的最佳时机含手续费

子序列问题
300. 最长递增子序列
674. 最长连续递增序列
718. 最长重复子数组(子数组 == 连续子序列)
1143. 最长公共子序列
1035. 不相交的线
53. 最大子数组和

编辑距离
392. 判断子序列
115. 不同的子序列
583. 两个字符串的删除操作
72. 编辑距离

回文
647. 回文子串
5. 最长回文子串
516. 最长回文子序列