OPPO 后端二面,凉凉。。。
美众议院通过 TikTok 法案
之前我们讲了 老美要求字节跳动在 165 天内剥离短视频应用 TikTok,当时的最新进度是 TikTok 给 1.7 亿美国用户发弹窗,发动用户群众给国会打电话进行抗议。
但显然这点力度的抗议并不会造成什么实质影响。
昨晚,美国众议院的议员们正式投票通过了该法案(H.R.7521),之后的流程还需要得到美国参议院的通过,然后才是提交给总统拜登批准。
![OPPO 后端二面,凉凉。。。](https://img-blog.csdnimg.cn/img_convert/7a4ddea3f68415cb4b1ce0c3bbff983b.png)
看似流程还长,但大概率不会出现什么变数,毕竟针对 TikTok 是两党的少数共识。
在正式投票之前,白宫秘书就公开称赞该提案,称拜登政府"希望看到这项法案得以通过,这样它就能被送到总统的办公桌上"。
这事儿如果真的被美国得逞,真的是很坏的示范。
现在比较合理的破局方式,只能是期望当时躲过特朗普狙击的方法能再奏效一次。
希望会有一些线下的抗议活动,动静越大越好,尽量拖延法案通过的日期。
只要法案通过日期延后,再加上法案生效后还有 165 天时间,就有可能避开美国大选,到时如果发生新政交接,或许就能再次获得喘息机会。
...
回归主线。
真心希望 TikTok 不会原地变外企,先不做字节跳动相关题目了。
来看一道 OPPO 二面算法原题。
蓝厂的花边新闻虽然不多,但一直是低调赚大钱的代表之一。
这次二面出的算法题水平也不错。
相比原题,题面稍有修改,但数据范围和解法完全一致。
题目描述
平台:LeetCode
题号:864
给定一个二维网格 g,其中:
- '.' 代表一个空房间
- '#' 代表一堵墙
- '@' 是起点
- 小写字母代表钥匙
-
大写字母代表锁
我们从起点开始出发,一次移动是指向四个基本方向之一行走一个单位空间。
我们不能在网格外面行走,也无法穿过一堵墙。
如果途经一个钥匙,我们就把它捡起来,除非我们手里有对应的钥匙,否则无法通过锁。
假设 k 为 钥匙/锁 的个数,且满足 ,字母表中的前 k 个字母在网格中都有自己对应的一个小写和一个大写字母。
换言之,每个锁有唯一对应的钥匙,每个钥匙也有唯一对应的锁。另外,代表钥匙和锁的字母互为大小写并按字母顺序排列。
返回获取所有钥匙所需要的移动的最少次数。
如果无法获取所有钥匙,返回 -1 。
输入:g = ["@.a.#","###.#","b.A.B"]
输出:8
解释:目标是获得所有钥匙,而不是打开所有锁。输入:g = ["@..aA","..B#.","....b"]
输出:6输入: g = ["@Aa"]
输出: -1提示:
- g[i][j] 只含有 '.', '#', '@', 'a'-'f' 以及 'A'-'F'
- 钥匙的数目范围是
- 每个钥匙都对应一个不同的字母
-
每个钥匙正好打开一个对应的锁
BFS + 状态压缩
一道常规的 BFS 运用题,只不过需要在 BFS 过程中记录收集到的钥匙状态。
利用「钥匙数量不超过 ,并按字母顺序排列」,我们可以使用一个 int 类型二进制数 state 来代指当前收集到钥匙情况:
- 若 state 的二进制中的第 位为 1,代表当前种类编号为 的钥匙 「已被收集」,后续移动若遇到对应的锁则 「能通过」
-
若
state 的二进制中的第
位为
0,代表当前种类编号为
的钥匙
「未被收集」,后续移动若遇到对应的锁则
「无法通过」
其中「钥匙种类编号」则按照小写字母先后顺序,从 开始进行划分对应:即字符为 a 的钥匙编号为 0,字符为 b 的钥匙编号为 1,字符为 c 的钥匙编号为 2 ...
当使用了这样的「状态压缩」技巧后,我们可以很方便通过「位运算」进行 「钥匙检测」 和 「更新钥匙收集状态」:
- 钥匙检测: (state >> k) & 1,若返回 1 说明第 位为 1,当前持有种类编号为 k 的钥匙
- 更新钥匙收集状态: state |= 1 {1,0},{-1,0},{0,1},{0,-1}};{1,0}, {-1,0}, {0,1}, {0,-1}};
还没有评论,来说两句吧...