leetcode

to-do:看一下别人写的题解

0. Tips

a. 算法复杂度估算经验

在竞赛中,一般算机一秒能运行5 x 10^8次汁算,

  • 一般 O(n)的算法数据范围n < 10^8。
  • O(n *logn)的算法数据范围n <= 10^6。
  • O(n*sqrt(n) )的算法数据范围n < 10^5。
  • O(n^2)的算法数据范围n<5000。
  • O(n^3)的算法数据范围n <300。
  • O(2^n)的算法数据范围n < 25。
  • O(n!)的算法数据范围n < 11。

一般来说,题目设计的时候,都会考虑让一个正确的而且没有经过高度优化的解通过。意思就是,除非写的非常非常瞎(就是常数非常大),不然不应该会超时。或者说也有可能你看到的代码经过了极端的优化,意外的通过了。一般来说,“时间复杂度是够的,但是却超时了”的情况是很少发生的(不是没有,确实有的题目卡常数)

1. 数学思想

题解 方法 说明 完成时间
119. 杨辉三角 II 动态规划、通项公式 观察数学规律 2021.2.12
1823. 找出游戏的获胜者 模拟、递归、约瑟夫环 递归思想 2022.5.4

2. 数据结构

2.1 字符串

题解 思想 时间
696. 计数二进制子串 一次遍历字符串 2020.08.12

2.2 数组

题解 思想 时间
189.旋转数组 - 20.1.30
896. 单调数列 两次遍历or一次遍历 2021.2.28

2.3 矩阵

题解 思想 时间
54. 螺旋矩阵 缩边 2021.03.16
59. 螺旋矩阵 II 缩边 2021.03.16

2.4 链表

索引 题解 最优算法 替代算法 备注 完成时间
0 206. 反转链表 1.迭代 2.递归 所有节点 20.1.27
1 92. 反转链表 II 1.迭代 2.递归 0的进阶版:从m到n的节点 20.1.27
2 24. 两两交换链表中的节点 1.迭代 2.递归 20.1.27
3 114. 二叉树展开为链表 递归 20.1.27
4 234. 回文链表 反转 1.stack 2.half stack 3.递归 20.1.27
5 25. K 个一组翻转链表 尾插法 1.递归 2.堆栈 2的普适版 1的递归版 20.1.28
6 138. 复制带随机指针的链表 影子法 dfs/bfs+hash 算法新颖 20.1.28
7 141. 环形链表 快慢双指针 20.1.28
8 142. 环形链表 II 快慢双指针+数学推导 结论记住 20.1.28
9 86. 分隔链表 双指针 20.1.28
10 143. 重排链表 反转后半 stack 跟4相像 20.1.28
11 160. 相交链表 1.尾部对齐 2.链表拼接 visited hash 可转化为8 20.1.29
12 61. 旋转链表 取模+移动head 20.1.29
13 21. 合并两个有序链表 1.迭代 2.递归 20.1.30
14 23. 合并K个排序链表 1.最小堆 2.分治 13的进阶版 20.1.30
15 203. 移除链表元素 线性遍历 easy 20.1.31
16 83. 删除排序链表中的重复元素 线性遍历 官方题解用循环不变式验证算法正确性 20.1.31
17 82. 删除排序链表中的重复元素 II 线性遍历 20.1.31

2.5 树

  • 概念
    • 二叉树:每个节点至多只有两个子节点的树。
      • 二叉搜索树:BST,全部左子孙节点 < val < 全部右子孙节点
      • 完全二叉树:除了最后一层外,每层都被完全填充。最后一层的节点从左到右填充。
      • 满二叉树:每个节点都有0个或2个子节点,即不存在只有1个子节点的节点。
      • 完美二叉树:完全二叉树+满二叉树。正好有2^k+1个节点。
    • 平衡树:是指“不是非常不平衡”的树。它的平衡性足以确保执行insert和find操作可以在O(logn)的时间复杂度完成,但并不一定是严格意义上的平衡树。
      • 红黑树
      • AVL树
  • 操作
    • 遍历
      • BST的中序遍历会从小到大遍历每个元素。
题解 题目 算法 3种语言 完成时间
104. 二叉树的最大深度 - dfs yep 2020.01
111. 二叉树的最小深度 - dfs yep 2020.01
112. 路径总和 bool dfs yep 2020.01
113. 路径总和 II 返回list[list] dfs+回溯 yep 2020.4.22
437. 路径总和 III int dfs+前缀和 yep 2020.5.13
199. 二叉树的右视图 返回list bfs dfs yep 2020.4.22
236. 二叉树的最近公共祖先(leetcode) - - - -
88. 最近公共祖先(lintcode) 返回节点 dfs yep 2020.4.22
117. 填充每个节点的下一个右侧节点指针 II 添加指针 迭代 层序 nope 2020.5.13
124. 二叉树中的最大路径和 路径和 dfs nope 2020.5.13
99. 恢复二叉搜索树 中序遍历 dfs morris nope 2020.5.13

2.6 堆/优先级队列

  • 最小堆
    • 概念
      • 最小堆是一种完全二叉树,每个节点都比它的子节点小。因此,根是树中的最小元素。
    • 操作
      • 建堆
        • 自底向上↑。从第一个非叶节点开始,将其与它左右节点中的最小值交换,并且向下递归。直到调整完根结点。时间复杂度为O(nlog(n))。
      • 插入insert
        • 自底向上↑。先插入到最后一层的右边,然后向上递归修复,与父节点进行交换,直到最小堆的属性得以恢复。时间复杂度为O(log(n))。
      • 提取最小元素extract_min
        • 自顶向下↓。删除最小元素,把最后一个元素移上来。然后向下传递这个元素,即选择左右子节点中的最小元素交换,直到最小堆的属性得以恢复。时间复杂度为O(log(n))。
题解 算法 原数据结构 任务 备注 完成时间
215. 数组中的第K个最大元素 堆的三种方法 nums[] 第k大 经典任务 2021.2.12
632. 最小区间 最小堆/滑窗法 k个数组 List[List[int]] 计算区间 最小值靠堆,最大值靠比较 2020.1.21
23. 合并K个排序链表 最小堆 k个链表List[ListNode] 合并 每步只需找最小值 2020.1.30
264. 丑数 II 最小堆/三指针 从1开始 第n个 经典 2020.5.3
1439. 有序矩阵中的第 k 个最小数组和 暴力解法/最小堆/二分法 矩阵mat: List[List[int]] 第k个 堆中[curr_sum, pointers] 跟丑数很像 2020.5.3
378. 有序矩阵中第K小的元素 最小堆/二分 矩阵mat: List[List[int]] 第k个 堆中[row, col, val] 跟丑数很像 2020.5.3
295. 数据流的中位数 两个堆 - 动态查询中位数 可用multiset 2020.5.6
347. 前 K 个高频元素 最小堆 数组nums[] 第k个高频元素 hashmap 2021.2.11
  • 215是很经典的题,可以用堆/快速选择来做,堆这里提供了3种方法,注意想清楚“第k大”和“第k小”的区别,想清楚堆的大小。
  • 347是215的延伸,同样使用大小为k的最小堆,只不过要先建立频率map。

2.7 单调栈

题解 任务 说明 完成时间
剑指 Offer 59 - II. 队列的最大值 实现类 面试题 03.02. 栈的最小值一样 2021.2.14
496. 下一个更大元素 I 数组中找下一个更大值 单调栈取代双重循环 2020.6
503. 下一个更大元素 II 数组中找下一个更大值 循环数组 2020.6
84. 柱状图中最大的矩形 求上一个和下一个更小元素 使用哨兵可以简化代码 2021.3.14
5704. 好子数组的最大分数 求min(区间)*len(区间)的最大值 很好的题目,是84. 柱状图中最大的矩形的升级版,加入了k作为限制;也可以用双指针 2021.3.14
907. 子数组的最小值之和 84. 柱状图中最大的矩形的简化版 使用哨兵可以简化代码 2022.05.05

2.8 图

题解 思路 时间
133. 克隆图 bfs dfs 2020.8.12
127. 单词接龙 bfs 双向bfs 2020.11.5
433. 最小基因变化 bfs 类似127. 单词接龙 2022.05.07

3. 算法

3.1 快速排序 & 快速选择

O(n^2):冒泡排序、选择排序、插入排序
O(nlogn):快速排序、希尔排序、堆排序、归并排序

题解 说明 完成时间
912. 排序数组 笔记 2020.5.7
215. 数组中的第K个最大元素 同上 2020.5.7

3.2 分治法

先区分一下概念

  • 二分查找:分
  • 合并两个有序数组:治
  • 对无序数组进行排序:分治

归并排序就是“分治法”的一种,尽管名字中只体现了“治”。

题解 说明 完成时间
912. 排序数组 归并排序 2020.4.25
面试题51. 数组中的逆序对 有返回值的归并排序 2020.4.25
53. 最大子序和 动态规划/有返回值不排序 2020.5.3

3.3 滑窗法

滑窗,是一种同向双指针技巧。通常题目中会出现“最长”“最小”等限定词。
labuladong滑窗法

题解 数据结构 移动 说明 完成时间
3. 无重复字符的最长子串 hashset/hashmap 右1左while 2019.8 / 2021.2.10
239. 滑动窗口最大值 labuladong单调队列 2020.4.26
1425. 带限制的子序列和 动态规划+单调队列 2020.4.26
76. 最小覆盖子串 hashmap 2020.5.2
5402. 绝对差不超过限制的最长连续子数组 单调队列 2020.5.3
632. 最小区间 hashmap/频次数组 2020.8.8
209. 长度最小的子数组 int 右1左while 2020.5.x
992. K 个不同整数的子数组 频次数组 右1左while “恰好 ”的理解 2021.2.9
424. 替换后的最长重复字符 频次数组 右1左if 只看长度,区间无需合法 2021.2.10
443. 压缩字符串 - 右1左if while 三指针 2021.2.14
1004. 最大连续1的个数 III int个数 右1左if 只看长度,区间无需合法 2021.2.19
395. 至少有K个重复字符的最长子串 频次hashmap 右1左while 手动加入限制 2021.2.27
  • 3 vs 424:两者的相似点在于都只看区间长度。不同之处在于424可以不用保证区间实时是合法的,只需长度ok;但3不能这么做,因为424只考虑最长重复字符的频率,3需要考虑每个字符的频率只出现1次,3要保证区间实时合法。1004是424的退阶。
  • 992:比较特殊,设计了滑窗函数,用差值来表示“恰好”的概念。

3.4 动态规划

题解 算法 完成时间
62. 不同路径 组合/二维动态规划/一维动态规划 2020/4/27
887. 鸡蛋掉落 二维动态规划/记忆化搜索 2020/5/2
983. 最低票价 一维动态规划 2020/5/6
1434. 每个人戴不同帽子的方案数 动态规划+状态压缩 2020/5/6
132. 分割回文串 II 动态规划 记忆化搜索 2021/3/8
115. 不同的子序列 二维动态规划 2021/3/18

3.5 二分查找

甜姨的二分查找模板

索引 题解 有序 有重复元素 旋转数组 目标任务 备注 完成时间
0 704. 二分查找 x x 查找 20.1.29
1 35. 搜索插入位置 x x 查找和插入 0的进阶版 20.1.29
2 34. 在排序数组中查找元素的第一个和最后一个位置 × 查找区间 0的进阶版 20.1.29
3 153. 寻找旋转排序数组中的最小值 × 找最小值 20.1.29
4 154. 寻找旋转排序数组中的最小值 II 找最小值 3的进阶版 20.1.29
5 33. 搜索旋转排序数组 × 查找 20.1.30
6 81. 搜索旋转排序数组 II 查找 5的进阶版 20.1.30
7 222. 完全二叉树的节点个数 节点个数 20.1.30
8 300. 最长上升子序列 × 覆盖 二分法是其中一步 19.7.x

p.s. 若要加深对旋转数组的理解,请戳189.旋转数组

3.6 对值的二分

  • 注:在对值的二分中,原区间一般都是包含可行解的,不会存在全fail的情况。

求最大可行解

while left <= right:
    mid = left + (right - left) // 2
    if canWork(mid):
        left = mid + 1
    else:
        right = mid - 1
return right

求最小可行解

while left < right:
    mid = left + (right - left) // 2
    if canWork(mid):
        right = mid  
    else:
        left = mid + 1
return left
题解 方法 时间
378. 有序矩阵中第K小的元素 最小堆/二分法 2020.5.3
1439. 有序矩阵中的第 k 个最小数组和 暴力解法/最小堆/二分法 2020.5.6
410. 分割数组的最大值 二分法 2020.5.6
LCP 12. 小张刷题计划 二分法 2020.5.6
2226. 每个小孩最多能分到多少糖果 二分法 20222.05.08

3.7 双指针

题解 数据结构 指针类型 时间
27. 移除元素(官方) 数组 同向双指针 2020.04.20
26. 删除排序数组中的重复项 数组 同向双指针 2020.04.20
80. 删除排序数组中的重复项 II 数组 同向双指针 2020.04.20
575. 分糖果 数组 同向双指针 2020.04.20
42. 接雨水 数组 相向双指针 2020.02
11. 盛最多水的容器 数组 相向双指针 2020.02
15. 三数之和 数组 相向双指针 2020.04.20
16. 最接近的三数之和 数组 相向双指针 2020.04.20
75. 颜色分类 数组 边界双指针+遍历指针 2020.04.20
202. 快乐数 公式 快慢双指针 找环 2020.04.30
905. 按奇偶排序数组 数组 相向双指针 2022.04.28
713. 乘积小于 K 的子数组 数组 同向双指针 2022.05.05

3.8 回溯/dfs

powcai

  • 回溯是dfs的特殊情况。
    • list做参数时会回溯
    • 无list做参数时,只dfs无回溯,还能考虑dp解法。
题解 思路 补充 时间
46. 全排列 swap used数组 liweiwei labuladong 2020.04.20
47. 全排列 II used数组 - 2020.04.20
78. 子集 dfs 两种递归树 liweiwei 2020.4.25
90. 子集 II 排序+dfs+剪枝 - 2020.4.25
51. N皇后 backtrack + isValid labuladong 2020.3
52. N皇后 II backtrack + isValid 位运算 2020.3
37. 解数独 backtrack + isValid 三种语言 2020.4.29
39. 组合总和 backtrack 笔记 2020.4.30
40. 组合总和 II backtrack 同上 2020.4.30
216. 组合总和 III backtrack 同上 2020.4.30
377. 组合总和 Ⅳ dfs / dp 同上 2020.4.30
518. 零钱兑换 II dfs / dp 同上 2020.4.30
77. 组合 backtrack 同上 2020.4.30
17. 电话号码的字母组合 backtrack 同上 2020.4.30
139. 单词拆分 dp - 2020.11.4
140. 单词拆分 II backtrack+memo 其他人的题解,配合自己的代码 2020.11.4
131. 分割回文串 backtrack+memo 2021.3.8
417. 太平洋大西洋水流问题 dfs can't dp 2022.04.28

3.9 位运算

我的笔记:https://www.jianshu.com/p/c4cf3d188900

题解 思路 时间
169. 多数元素 哈希表 排序法 随机化 分治法 投票法 位运算 2020.3.13
1178. 猜字谜 位运算 二进制子集遍历 2021.2.26

3.10 前缀和

区间 -> 值

题目 思路 时间
303. 区域和检索 - 数组不可变 前缀和/线段树 2021.03.01
304. 二维区域和检索 - 矩阵不可变 前缀和 2021.03.02

值 -> 区间

题目 思路 时间
560. 和为K的子数组 前缀和+动态哈希表,层层优化 2021.03.02

线段树

3.11 并查集

我的笔记:

3.12 蓄水池抽样

  • 蓄水池抽样的适用场景:
    • (1)从所有样本中抽取若干个,要求每个样本被抽到的概率相等。
    • (2)总的样本数量未知,或数据量非常大、难以一次读取。
  • 蓄水池抽样的复杂度
    • 时间复杂度:O(n)
    • 空间复杂度:O(1)
  • 注:如果仅有条件1,那么用普通的随机数就可以:空间复杂度为O(n),初始化时间复杂度为O(n),请求时间复杂度为O(1)
题目 思路 时间
398. 随机数索引 蓄水池抽样 2022.04.26
382. 链表随机节点 蓄水池抽样 2022.04.26

3.13 原位哈希

题目 思路 备忘 时间
442. 数组中重复的数据 交换 / 负号 交换时a,b不能写反 2022.05.08
448. 找到所有数组中消失的数字 交换 / 负号 442. 数组中重复的数据,注意返回的是索引不是值 2022.05.08

4. 问题归纳

4.1 子序列

连续子序列 vs 子序列

x 有序 连续 思路
1. 子序列 × 贪心/dp
2. 连续子序列/子串 滑窗/dp/单调栈
3. 排列/重排 × dfs
  1. 300. 最长上升子序列 | 动态规划 or 贪心+二分 | O(nlog(n))+O(n)
  2. 128. 最长连续序列 | 非常简单的一次遍历 | O(n)+O(1)
  3. 53. 最大子序和 | 一次遍历/分治 | O(n) / O(nlog(n))
  4. 152. 乘积最大子数组 | 双dp | O(n)
    354. 俄罗斯套娃信封问题 | 二维最长上升子序列 | O(nlog(n))

4.2 区间

题解 算法 备注 完成时间
56. 合并区间 先排序再遍历 官方题解 2020.6
57. 插入区间 模拟遍历 官方题解 2020.11.4

5. 常见系列

5.1 N数之和

题解 思路 时间
15. 三数之和 排序+相向双指针 2020.04.20
16. 最接近的三数之和 排序+相向双指针 2020.04.20

5.2 接雨水

题解 思路 时间
42. 接雨水 双指针 2020.02
11. 盛最多水的容器 动态规划 双指针 2020.02

5.3 山脉数组

题解 思路 时间
852. 山脉数组的峰顶索引 二分查找 2020.4.29
941. 有效的山脉数组 线性扫描 2020.4.29
845. 数组中的最长山脉 状态机 2020.4.29
1095. 山脉数组中查找目标值 3次二分查找 2020.4.29

5.4 股票问题

题解 题目 思路 时间
121. Best Time to Buy and Sell Stock 最多一次交易 贪心法 2019.8
122. Best Time to Buy and Sell Stock II 无限次交易 贪心法 2019.8
123. Best Time to Buy and Sell Stock III 最多两次交易 二分贪心/动态规划 2019.8
188. Best Time to Buy and Sell Stock IV 最多k次交易 动态规划(二维背包) 2020.4.19

5.5 跳跃游戏

题解 题目 思路 时间
55. 跳跃游戏 单向 能不能跳到最后 贪心 2020.02
45. 跳跃游戏 II 单向 最少步数 贪心 2020.02
1306. 跳跃游戏 III 双向 能不能跳到某处 bfs 2020.02
1340. 跳跃游戏 V 双向 最多访问多少 动态规划 2020.02

5.6 爬楼梯

题解 题目 思路 时间
70. 爬楼梯 多少种方法 排列问题 动态规划 空间可优化到O(1) 2019/07
746. 使用最小花费爬楼梯 最小花费 动态规划 空间可优化到O(1) 2020/04/19

5.7 零钱兑换

题解 题目 思路 时间
322. 零钱兑换 最小硬币个数 1d动态规划/ dfs+贪心 2020/4/19
518. 零钱兑换 II 有多少硬币组合 组合问题 1d动态规划 2020/4/19

5.8 二维有序矩阵

题解 思路 时间
74. 搜索二维矩阵 二分/区间缩减 2020.5.2
240. 搜索二维矩阵 II 区间缩减 题解见上 2020.5.2
378. 有序矩阵中第K小的元素 最小堆/二分法 2020.5.3

5.9 岛屿

题解 思路 时间
200. 岛屿数量 bfs dfs 并查集 19.6.x
434. 岛屿的个数II(lintcode) 并查集 2020.4.18
695. 岛屿的最大面积 bfs dfs 20.3.15
1254. 统计封闭岛屿的数目 bfs dfs 20.3.16

5.10 组合问题-回溯法

我的笔记:https://www.jianshu.com/p/5b835e543bdf

5.11 图染色问题

6. 特殊方法

6.1 覆盖法

题解 思路 时间
300. 最长上升子序列 覆盖法+二分法 19.7.x

6.2 投票法

题解 思路 时间
169. 多数元素 哈希表 排序法 随机化 分治法 投票法 位运算 20.3.13
229. 求众数 II 投票法 20.3.16

7. 其他问题

7.1 三维几何

题解 思路 时间
883. 三维形体投影面积 空间想象能力 2022.4.26

8. 周赛

第181场周赛 2020/3/22

比赛链接
1391. 检查网格中是否存在有效路径 | dfs(看提交记录) | 2020.5.7
1392. 最长快乐前缀 | 字符串hash kmp的第一步(看提交记录)| 2020.5.7

第182场周赛 2020/3/29

比赛链接
1397. 找到所有好字符串 | 数位dp+kmp | forget it...

第183场周赛 2020/4/5

比赛链接
1405. 最长快乐字符串 | 贪心 | 2020.4.5
1406. 石子游戏 III | 博弈dp | 2020.4.5

LCP春季编程大赛 个人赛 2020/4/18

比赛链接

第24场双周赛 2020/4/18

周赛链接
和为 K 的最少斐波那契数字数目 | 2020.4.18

第 185 场周赛 字节跳动 2020/4/19

周赛链接
5390. 数青蛙 | 2020.4.19
5391. 生成数组 | 2020.4.19

第 186 场周赛 2020/4/26

周赛链接
5394. 对角线遍历 II | 2020.4.26
5180. 带限制的子序列和 | 2020.4.26

LCP春季编程大赛 战队赛 2020/4/26

比赛链接

第 25 场双周赛 2020/5/2

周赛链接
1432. 改变一个整数能得到的最大差值 | 精心/暴力 |2020/5/2
1434. 每个人戴不同帽子的方案数 |动态规划+状态压缩 | 2020/5/6

第 187 场周赛 2020/5/3

周赛链接
5402. 绝对差不超过限制的最长连续子数组 | 滑窗+单调队列 | 2020.5.3
1439. 有序矩阵中的第 k 个最小数组和 | 暴力解法/最小堆/二分法 |2020.5.3

第 188 场周赛 图森未来 2020/5/10

5405. 形成两个异或相等数组的三元组数目 | 位运算 | 2020.5.10
5406. 收集树上所有苹果的最少时间 | dfs | 2020.5.10
5407. 切披萨的方案数 | dp | 2020.5.10

第 188 场周赛 2020/5/17

比赛链接

  1. 数位成本和为目标值的最大数字 dfs超时 dp通过

第 188 场周赛 2020/5/17

比赛链接
最后一题我服了 这周的两场比赛表现都不好qwq
5415. 圆形靶内的最大飞镖数量

第 32 场双周赛 2020/8/8

比赛链接
5468. 第 k 个缺失的正整数:这道题可以对比268. 缺失数字(位运算)和字节的面试题41. 缺失的第一个正数(列表/位运算,最优时间复杂度为O(n),不是O(max(arr))

第 228 场周赛 2021/2/14

比赛链接
时隔半年后参加周赛orz 这次竞赛的每道题都好简单,不过有事儿没做完,只做出来前两道题。
5676. 生成交替二进制字符串的最少操作数:当字符串长度固定时,只有两种交替字符串。
5677. 统计同构子字符串的数目:简单的滑窗法,注意书写简洁。
5678. 袋子里最少数目的球:对值的二分,还是有点容易写错
5679. 一个图中连通三元组的最小度数:似乎没难度…

第 229 场周赛 2021/2/21

比赛链接
只做出来两道qwq
1768. 交替合并字符串:单指针,送分。
1769. 移动所有球到每个盒子所需的最小操作数:分为左右两边考虑,实时维护变量,注意考虑清楚当boxes[i]=='1'的处理情况。
1770. 执行乘法运算的最大分数:二维动态规划,不算难,但是容易写错。
1771. 由子序列构造的最长回文串的长度:二维动态规划,关键在于1. 遍历的方向 2. 如何避免空集。
516. 最长回文子序列:动态规划,记住套路。
1143. 最长公共子序列:动态规划

第 230 场周赛 2021/2/28

比赛链接
做出来前三道题,第四道好难。
5689. 统计匹配检索规则的物品数量:送分题,对数组一次遍历
5690. 最接近目标价格的甜点成本:dfs回溯,与硬币题类似,写法已经很熟练了,复杂度为O(10*(3^10))
5691. 通过最少操作次数使数组的和相等:贪心法,先改变操作空间大的元素。
5692. 车队 II:step1,想到写双重循环来做,不过n=10^5,会超时。 step2,引入单调栈,优化为O(n)的复杂度。
853. 车队

第 47 场双周赛 2021/3/6

比赛链接
很简单,但只做出来前三题,最后一题超时了。
1779. 找到最近的有相同 X 或 Y 坐标的点:送分
1780. 判断一个数字是否可以表示成三的幂的和:注意是不同的幂,所以更简单了,循环减就可以
1781. 所有子字符串美丽值之和:双重循环+最大最小值,O(nn26)
1782. 统计点对的数目:精心卡时间复杂度。不能扫描点对,需要先按点计数,然后扫描边去重。

第232场周赛 2021/3/14

无敌简单,4道ace,但排名才400+,因为最后一题时间复杂度我没算好,一直超时,最后才发现其实很简单。
5701. 仅执行一次字符串交换能否使两个字符串相等:虽然做出来了,但写复杂了。
5702. 找出星型图的中心节点:O(1)解法
5703. 最大平均通过率:典型的堆,元素是三元组,如何制定优先选择的规则
5704. 好子数组的最大分数:1. 双指针,比11. 盛最多水的容器
更简单 2. 单调栈

第48场双周赛 2021/3/20

比赛链接
排名291 / 2853。
5693. 字符串中第二大的数字:送分。
5694. 设计一个验证系统:Hashmap。高级做法:LRU,双向链表。

第233场周赛 2021/3/21

比赛链接
有点难,做出了3/4,排名568 / 5009。最后一题没见过。一定要想好复杂度再动手,不要做无用功。
5709. 最大升序子数组和:一次遍历。审题要细致,这里是“连续子数组”,O(n)一次遍历就行;我最开始理解成了“子数组”,用了O(n2)动态规划。
5710. 积压订单中的订单总数:看数据量,是10^5,用堆。
5711. 有界数组中指定下标处的最大值:二分法,模板。

LCCUP 力扣杯2021春季编程大赛-个人赛 2021/04/05

比赛链接

  • 总体感受
    • 129/9000+,还可以吧。
    • 前三题一遍过,总用时30+min,直接看提交记录;
    • 倒数第二题用DFS,但剪枝没剪到位,没想到魔法卷轴的等效,超时了;
    • 最后一题可以想到贪心法,遍历时间,找能完成任务多的时间段;想不到不超时的方法。

LCP 28. 采购方案:典型的双指针问题。先排序,两个指针从两侧向内走。
LCP 29. 乐团站位:数学题,同余问题,先把最外面的圈给算出来,然后计算该位置是第几个。
LCP 30. 魔塔游戏:贪心法+堆。当sum变为负数时,就从堆里找个最小的负数放在后面,如果堆空了返回false,以及如果加上所有放在后的负数后小于0,也返回false。

第 287 场周赛 2022/04/03 地平线

比赛链接

比赛结束后虚拟竞赛的~这场竞赛非常简单,四道题都做出来了,结果300+/6000+。这个故事告诉我们,简单的题也不能松懈!
2224. 转化时间需要的最少操作数:easy,贪心,官方解法和我一致
2225. 找出输掉零场或一场比赛的玩家:easy,哈希表,官方解法和我一致
2226. 每个小孩最多能分到多少糖果:对值的二分,可以参考前文的求上界的模板
2227. 加密解密字符串:不难,但是错误提交了两次。逆向思维!遍历字典 instead of 遍历输入。

第288场周赛 2022/04/10 Airwallex

比赛链接

比赛结束后虚拟竞赛的~
2231. 按奇偶性交换后的最大数字:送分
2232. 向表达式添加括号后的最小结果:送分,分别遍历左右括号的位置即可,需要细心想清楚边界。但是一开始没看清题意,只返回了int呜呜。
2233. K 次增加后的最大乘积:送分,贪心+堆。一定要注意题目让取模!而且循环内要取模,否则超时。
2234. 花园的最大总美丽值:前缀和+二分查找!是真的没有什么头绪,想了想dp感觉不可行,然后陷入沉思。悄悄看了官方题解的文字思路,然后自己写出来了!这道题蛮精彩的,不仅思路巧妙,而且边界也非常繁琐。值得回顾!

招商银行专场竞赛 2022/04/10

比赛链接
别人的题解
招商银行-01. 文本编辑程序设计:送分,搞清数组边界即可
招商银行-02. 公园规划:送分,抽屉问题
招商银行-03. 点燃木棒:BFS。审题很久才懂,挺麻烦的。容易错
招商银行-04. 商店促销活动:又是一道完全没有头绪的题。三维DP。好难好难好难。参考:https://www.bilibili.com/read/cv16080974

第 76 场双周赛 2022/04/16 中控技术

第 289 场周赛 2022/04/17 海康威视

比赛链接
2243. 计算字符串的数字和:送分。
2244. 完成所有任务需要的最少轮数:dp,like青蛙跳。

第290场周赛 2022/04/24 华为

2248. 多个数组求交集:送分。方法一:暴力搜索,时间O(n^2),空间O(1)。方法二:哈希,时间O(n),空间O(n)
2249. 统计圆内格点数目:暴力 + 优化。复杂度:201 * 201* 200=8*10^6。优化方法1:x**2 改为 x*x,见题解区;优化方法二:半径倒排。
2250. 统计包含每个点的矩形数目:最初的思路是:对于每个点的坐标,先二分找满足w >= w0w,然后在这些矩形中二分找h >= h0的。我以为复杂度是O(len(points) * log(len(rectangles) * log(len(rectangles)),事实上no。因为在选取矩形的时候,搬移并sort了r_h,所以复杂度是O(len(points) * log(len(rectangles) * len(rectangles),会超时。在看到其他题解后,找到了新思路,见链接。

第77场双周赛 2022/04/30 中信银行

比赛链接
第三题千辛万苦做出来,第四题实在放弃了。排名1200+,leetcode可真卷啊。
2255. 统计是给定字符串前缀的字符串数目:简单题,但需要考虑字符串长度<前缀的情况,否则指针越界呜呜。+5min预警!
2256. 最小平均差:思路也很容易想到,前缀和即可。
6053. 统计网格图中没有被保卫的格子数:多种遍历角度。一开始写超时了,一定要先想清楚复杂度再动手!
6054. 逃离火灾: 待填坑。对等待时间进行二分。

第291场周赛 2022/05/01 FunPlus

比赛链接
第三题卡住了,耽误了不少时间。好在努力之下,最后四道题都做出来了,但是排名只有600多呜呜。
6047. 移除指定数字得到的最大结果:模拟,生成移除后的字符串,保留最大的。时间复杂度为O(n)
6048. 必须拿起的最小连续卡牌数:方法1,滑窗法,保证窗口内没有重复元素,那么max(窗口+1)即为答案,时间复杂度O(n),空间复杂度O(n)。方法2,使用map(哈希表)记录每个数的索引位置,那么索引的最小差值+1即为答案,时间复杂度O(n),空间复杂度O(n)
6049. 含最多 K 个可整除元素的子数组:一开始审错题了,以为子数组不需要连续,想用回溯来做。后来悬崖勒马,改用滑窗法,不过时间复杂度竟然与暴力法一样呜呜呜。(填坑:评论区说的滚动哈希? )
6050. 字符串的总引力:非常精妙的题目,转换视角,遍历字符集!见简书

  1. 统计异或值在范围内的数对有多少

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容