代码随想录刷题列表
April 3, 2025About 8 min
数组
- 704. 二分查找
- 35. 搜索插入位置
- 34. 在排序数组中查找元素的第一个和最后一个位置
- 69.x 的平方根
- 367.有效的完全平方数
- 27. 移除元素
- 26.删除排序数组中的重复项
- 283.移动零
- 844.比较含退格的字符串 有个双指针的解法比较复杂
- 977.有序数组的平方
- 59.螺旋矩阵II
- 54. 螺旋矩阵
- 34. 在排序数组中查找元素的第一个和最后一个位置 没看懂,再做一遍
滑动窗口
- 209.长度最小的子数组 滑动窗口
- 904. 水果成篮 滑动窗口
- 76. 最小覆盖子串滑动窗口
- 1004. 最大连续1的个数 III 重新做一下
- 3. 无重复字符的最长子串
- 30. 串联所有单词的子串难度较高
- 187. 重复的DNA序列 使用滑动窗口做一下,目前用的呆比做法
最小滑窗模板:给定数组 nums,定义滑窗的左右边界 i, j,求满足某个条件的滑窗的最小长度。
while j < len(nums):
判断[i, j]是否满足条件
while 满足条件:
不断更新结果(注意在while内更新!)
i += 1 (最大程度的压缩i,使得滑窗尽可能的小)
j += 1最大滑窗模板:给定数组 nums,定义滑窗的左右边界 i, j,求满足某个条件的滑窗的最大长度。
while j < len(nums):
判断[i, j]是否满足条件
while 不满足条件:
i += 1 (最保守的压缩i,一旦满足条件了就退出压缩i的过程,使得滑窗尽可能的大)
不断更新结果(注意在while外更新!)
j += 1是的,关键的区别在于,最大滑窗是在迭代右移右边界的过程中更新结果,而最小滑窗是在迭代右移左边界的过程中更新结果。因此虽然都是滑窗,但是两者的模板和对应的贪心思路并不一样,而真正理解后就可以在lc.76,lc.904,lc.3, lc.1004写出非常无脑的代码。
时间复杂度为:O(N), 空间复杂度为:O(N).
链表
- 203.移除链表元素
- 707.设计链表
- 206.反转链表
- 24. 两两交换链表中的节点
- 19.删除链表的倒数第N个节点
- 面试题 02.07. 链表相交
- 160.链表相交
- 141. 环形链表
- 142.环形链表II
- 143. 重排链表 可以再复习下
- 61. 旋转链表 可以再复习下
- 86. 分隔链表
- 725. 分隔链表
- 21. 合并两个有序链表
- 23. 合并 K 个升序链表
哈希表
- 242.有效的字母异位词
- 49.字母异位词分组
- 438.找到字符串中所有字母异位词
- 349. 两个数组的交集
- 350.两个数组的交集 II
- 202. 快乐数
- 1. 两数之和
- 454. 四数相加 II
- 383. 赎金信
- 15. 三数之和
- 18. 四数之和
字符串
- 344. 反转字符串
- 541. 反转字符串 II
- 剑指 Offer 05. 替换空格
- 151. 反转字符串中的单词
- 剑指 Offer 58 - II. 左旋转字符串
- 28. 找出字符串中第一个匹配项的下标
- 459. 重复的子字符串
双指针法
- 27. 移除元素
- 26.删除排序数组中的重复项
- 283. 移动零
- 844. 比较含退格的字符串
- 977. 有序数组的平方
- 541. 反转字符串 II
- 151. 反转字符串中的单词
- 19. 删除链表的倒数第 N 个结点
- 面试题 02.07. 链表相交
- 142. 环形链表 II
- 15. 三数之和
- 18. 四数之和
栈和队列
二叉树
- 144. 二叉树的前序遍历
- 145. 二叉树的后序遍历
- 94. 二叉树的中序遍历
- 102. 二叉树的层序遍历
- 107. 二叉树的层序遍历 II
- 199. 二叉树的右视图
- 637. 二叉树的层平均值
- 429.N叉树的层序遍历
- 515.在每个树行中找最大值
- 116.填充每个节点的下一个右侧节点指针
- 117.填充每个节点的下一个右侧节点指针II
- 104.二叉树的最大深度
- 111.二叉树的最小深度
- 226. 翻转二叉树
- 101. 对称二叉树
- 100.相同的树
- 572.另一个树的子树
- 104. 二叉树的最大深度
- 559.n叉树的最大深度
- 111. 二叉树的最小深度
- 222. 完全二叉树的节点个数
- 110. 平衡二叉树
- 257. 二叉树的所有路径
- 404. 左叶子之和
- 513. 找树左下角的值
- 112. 路径总和
- 113. 路径总和 II
- 106. 从中序与后序遍历序列构造二叉树 要找时间研究下
- 105. 从前序与中序遍历序列构造二叉树 要找时间研究下
- 654. 最大二叉树 我是直接抄的答案,找个时间重写下
- 617. 合并二叉树
二叉树做到了 21 题,暂时换个口味做做
回溯算法
回溯的模板
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}回溯是递归的副产品,只要有递归就会有回溯。
回溯法就是暴力搜索,并不是什么高效的算法,最多在剪枝一下。
回溯算法能解决如下问题:
组合问题:N 个数里面按一定规则找出 k 个数的集合
排列问题:N 个数按一定规则全排列,有几种排列方式
切割问题:一个字符串按一定规则有几种切割方式
子集问题:一个 N 个数的集合里有多少符合条件的子集
棋盘问题:N 皇后,解数独等等
做到了第 18 题,换个口味
贪心算法
- 455. 分发饼干
- 376. 摆动序列
- 53. 最大子数组和
- 122. 买卖股票的最佳时机 II
- 55. 跳跃游戏
- 45. 跳跃游戏 II
- 1005.K 次取反后最大化的数组和有重做的可以
- 134. 加油站
- 135. 分发糖果
- 860. 柠檬水找零
- 406. 根据身高重建队列
- 452. 用最少数量的箭引爆气球
- 435. 无重叠区间有问题
- 763. 划分字母区间
- 56. 合并区间
- 738. 单调递增的数字
动态规划
Contributors
Dylan Kwok