进了牛马公司,调个空调温度,被开除了~
刚刷到个贴子,说有人因为调空调温度被开除了,评论区一片“牛马公司”骂声😅。我一个程序员看了真的哭笑不得。
我觉得这事吧,表面看是“调空调”这么小的事,但背后反映的其实是公司容忍度和管理逻辑的问题。网友们的回复我看了看,有的说这是职场PUA,有的说年轻人不懂分寸。怎么说呢,我不觉得这完全是年轻人问题,如果一家公司因为空调这种琐事就动开除,说明它的管理风格是“服从 > 沟通”,这才是最吓人的。
程序员的日常环境离不开“舒适”二字,温度不对,效率真会直接掉线。但再不合理,也该先提意见再调整。真动手改设定,没准就是踩了“雷区”。
所以我的看法是:既要看清职场规则,也别太高估自己的不可替代性。成熟不是服从,是知道什么时候说话,怎么说话。【备注:文末可领最新资料】
算法题:祖玛游戏
其实这个题目网上也不少,但我说说我自己的理解哈。祖玛游戏的核心就是...怎么说,给你一串球,比如"WRRBBW",每个字母代表一个颜色嘛,然后你手里有一些球可以随时插进队伍里,插完只要连续3个或以上同色就会被消掉,这一消,有可能还会继续连锁反应。问你最少插几次,能把所有球都消完,消不完就输出-1。实际写代码的时候,递归、回溯、BFS都行,主要看你思路清不清楚。
我自己写的时候,最常用还是DFS加记忆化,不然直接暴力真卡死。大致意思就是,每次枚举手上球,暴力插进某个位置,然后递归继续搞,注意插了球之后要把消掉的地方全删掉(这里得写个函数,反复去消,直到不能消为止)。每种情况都算一次步数,最后取最小的那个。顺便还要剪枝,不然复杂度爆炸。
具体实现细节,像我昨天在公司楼下抽烟的时候,还跟小李讨论过,最容易出bug的就是如何连锁消除,有的人就写成只消一次,其实要一直while循环消下去,不然有些复杂case过不了。还有一个小坑,手上球比如“YRB”,你用掉了要记得删掉,别递归的时候全都还原回去了,那样等于没用。
代码其实我这边有段很久前写的,Java版本,我贴一下思路(别抠代码细节哈,主要思路清楚最重要):
publicclassZumaGame{
publicintfindMinStep(String board, String hand){
int[] cnt = newint[26];
for (char c : hand.toCharArray()) cnt[c - 'A']++;
int res = dfs(board, cnt, new HashMap<>());
return res == Integer.MAX_VALUE ? -1 : res;
}
privateintdfs(String board, int[] cnt, Map<String, Integer> memo){
board = remove(board);
if (board.length() == 0) return0;
String key = board + "#" + Arrays.toString(cnt);
if (memo.containsKey(key)) return memo.get(key);
int ans = Integer.MAX_VALUE;
for (int i = 0; i < board.length(); ++i) {
for (char ch = 'A'; ch <= 'Z'; ++ch) {
if (cnt[ch - 'A'] == 0) continue;
if (i > 0 && board.charAt(i - 1) == ch) continue;
if (board.charAt(i) != ch && (i == 0 || board.charAt(i - 1) != board.charAt(i))) continue;
cnt[ch - 'A']--;
String next = board.substring(0, i) + ch + board.substring(i);
int temp = dfs(next, cnt, memo);
if (temp != Integer.MAX_VALUE) ans = Math.min(ans, temp + 1);
cnt[ch - 'A']++;
}
}
memo.put(key, ans);
return ans;
}
private String remove(String s){
int i = 0;
while (i < s.length()) {
int j = i;
while (j < s.length() && s.charAt(j) == s.charAt(i)) j++;
if (j - i >= 3) return remove(s.substring(0, i) + s.substring(j));
i = j;
}
return s;
}
}
像这种题,暴力能写出来已经不错了,但如果你想加速,记忆化或者BFS优化下状态比较关键。实际开发其实很少遇到这么“恶心”的递归嵌套,不过算法面试里太喜欢考这种爆搜+剪枝的套路了,熟练一点肯定加分。
反正我跟老同学说完,他最后一句就是“谢谢哥,明天我抄你这版改一改”。我说你别全抄,面试官问细节还是得自己理解哈——比如为什么要memo记忆,消除函数为啥要写成递归。要真讲不出来,面试官一看就是模板套的,分分钟抓你。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html