英伟达同事圈有员工表示,今天在找bug中再次输给了 claude,以后只能去当电工了
英伟达员工都开始被Claude狠狠干碎了,这乐子就有点大了。
有人吐槽说,今天找bug又没找过Claude,心态直接崩到想改行去当电工。底下网友也挺损,一个说“别慌,电工以后也得带着AI排线”,另一个更狠:“你不是输给AI,你是输给了会提问的人。”这话扎心,但还真有点准。
以前程序员最怕产品瞎改需求,现在好了,旁边坐着个不睡觉、不摸鱼、上下文还贼长的搭子,代码一甩,问题一问,它真能顺手给你扒开几层。人一对比,容易怀疑人生。尤其那种卡了一下午的臭bug,它几分钟给你指出来,谁顶得住。
程序员这碗饭还没砸,只是以后嘴硬没用了,谁会用AI,谁少熬夜。
面试题:打开转盘锁
这题我第一次看,没把它当“图搜索模板题”,而是先把那 4 个轮子当成线上那种状态机看。你每拨一次,其实就是从当前状态走到一个相邻状态。0000 是起点,目标串是终点,deadends 是直接禁掉的节点。这样一翻译,路子就很顺了:别贪,老老实实用 BFS。
原因也简单,这题求的是最少旋转次数。只要边权一致,BFS 天然就是按层扩散,先到目标的那一层,步数一定最小。DFS 也能做,但你会在各种岔路里绕半天,最后还得自己兜最短步数,没必要给自己找事。
先看核心代码,够用了,不写那些花里胡哨的封装:
import java.util.*;
publicclassSolution{
publicintopenLock(String[] deadends, String target){
Set<String> dead = new HashSet<>(Arrays.asList(deadends));
if (dead.contains("0000")) return -1;
if ("0000".equals(target)) return0;
Queue<String> queue = new LinkedList<>();
Set<String> visited = new HashSet<>();
queue.offer("0000");
visited.add("0000");
int step = 0;
while (!queue.isEmpty()) {
int size = queue.size();
while (size-- > 0) {
String cur = queue.poll();
if (dead.contains(cur)) continue;
if (target.equals(cur)) return step;
for (String next : expand(cur)) {
if (!visited.contains(next) && !dead.contains(next)) {
visited.add(next);
queue.offer(next);
}
}
}
step++;
}
return -1;
}
private List<String> expand(String cur){
List<String> list = new ArrayList<>(8);
char[] arr = cur.toCharArray();
for (int i = 0; i < 4; i++) {
char old = arr[i];
arr[i] = old == '9' ? '0' : (char)(old + 1);
list.add(new String(arr));
arr[i] = old == '0' ? '9' : (char)(old - 1);
list.add(new String(arr));
arr[i] = old;
}
return list;
}
}
这题真正容易写别扭的,不是 BFS 本身,是几个小地方。
第一个,deadends 不是走到以后才算死,是根本不能进队列。有些写法喜欢先入队,出队时再判死,结果队列里塞一堆脏数据,虽然也能过,但看着就不利索。
第二个,visited 一定要在入队时就标记,不要等出队再标。不然同一个状态会被反复塞进去,数据量一上来,队列就开始发胖。
第三个,拨轮不是加一减一那么简单,0 要能回到 9,9 要能转到 0。这种环形状态,现场里最容易写错的就是边界。
拿 0202 这种目标串举例,BFS 会先扩散一步能到的 8 个状态,再扩散两步、三步……你不用关心具体走哪条路最优,因为队列天然已经替你按“最短层级”排好了。这个思路比手工模拟转盘稳得多。
复杂度也不虚。总状态就 0000 到 9999,一共 10000 种,每个状态最多扩展 8 个邻居,所以时间复杂度基本就是 O(10000 * 8),说白了就是常数量级。空间复杂度主要花在队列和去重集合上,也是 O(10000)。这题数据范围下,够宽裕。