吃了四个 penalty 还花了 44:44
但排名竟然没想像中烂
可能是因为第四题没那么好想
https://i.imgur.com/OPOElDm.png
1. Minimum Common Value
直接用 set 把 nums1 有的数存起来再去看 nums2 里有没有重复的就好
很显然可以改用 2-poitner 来做会比较有效率但没必要
2. Minimum Operations to Make Array Equal II
看了一下排行榜,penalty 率超高
连第一页的也一样 笑死大家都没考虑到 k=0
k个一份,如果多的份数和少的份数一样就是合法的
如果不足一份就直接不合法
3. Maximum Subsequence Score
先依据 nums2 的值由大排到小
因此在处理某个人时,在他之前的都是 nums2 比他大的
因此乘法的右边就一定是自己
乘法的左边就用一个 minHeap 来维护最大的 k-1 个 nums1 的值即可
因为把其中一个 second 写成 first 吃到 penalty
这样竟然能过范例测资也是神奇
4. Check if Point Is Reachable
花了 10 秒丢一个 return gcd(x, y) == 1 试试
果不其然是错的
想了一阵子之后,发现几个性质
1. 不能让值变成 <= 0,不然永远回不去,因为无法让另一个也变负的
2. 因此想让值变大只能用 *2 的
3. 因此对 (X, Y) 而言,假如 X = 2 * Z
则 (X, Y) 是否能到达若且唯若 (Z, Y)
4. 因此我们可以等价的转换成都是奇数的形式
5. 如果都是奇数且不失一般性令 X >= Y,则
(X, Y) 能否到达等价于 (X - Y, Y) 能否到达
不能减另一个方向因为会让其中一边 <= 0
所以可以让 (X, Y) 不断递减,
且每两次操作至少减半一次(第5步的 X-Y 一定是偶数)
所以是 O(logn) 可以解
最后一题还不错,可惜这场吃太多 penalty 了
错了也常没多想就随便上传
祝大家新年快乐