第 330 场周赛
Date: 2023-01-29
千载难遇两 hard ,红红火火过大年
A 统计桌面上的不同数字
如果桌面上有 \(x\),那么下一次 \(x - 1\) 一定会出现,因为 \(x \mod (x-1) = 1\)
复杂度分析
- 时间复杂度:\(O(1)\)
- 空间复杂度:\(O(1)\)
B 猴子碰撞的方法数
如果 \(n\) 个猴子都往一个方向转,就不会发生碰撞,其余情况都会。所以答案为 \(2^n - 2\)。使用快速幂计算。
复杂度分析
- 时间复杂度:\(O(\log n)\)
- 空间复杂度:\(O(1)\)
C 将珠子放入背包中
假设 \(k = n\),那么背包价格之和固定为 \(2\sum_i \textit{weights}[i]\)。如果 \(k\) 变为 \(n - 1\),那么相当于从中选择一对 \(\textit{weights}[i] + \textit{weights}[i + 1]\) 删去。
依次类推,每次 \(k\) 减小 \(1\),都等价于找到一组 \(\textit{weights}[i] + \textit{weights}[i + 1]\) 删去。所以我们提前将这 \(n - 1\) 个相邻价值对排好序,贪心求解即可。
复杂度分析
- 时间复杂度:\(O(n\log n)\)
- 空间复杂度:\(O(n)\)
D 统计上升四元组
四元组 \((i, j, k, l)\),需满足条件 \(\textit{nums}[i] < \textit{nums}[k] < \textit{nums}[j] < \textit{nums}[l]\)。
对于每个 \(l\),求解前面有多少个 \(j\) 满足 \(\textit{nums}[i] < \textit{nums}[k] < \textit{nums}[j]\) 即可。
从小到大遍历 \(k\),然后在从小到大遍历 \(j\),过程中记录前面有多少个小于 \(\textit{nums}[k]\) 的元素,这样即可对于每个 \(j\) 求出所组成的三元组 \((i, j, k)\) 的个数。
复杂度分析
- 时间复杂度:\(O(n^2)\)
- 空间复杂度:\(O(n)\)
本文访问 次