字节员工吐槽:被组内37岁老嫡针对,大概率年底要被搞走。有没有反击的办法?
刚看到个贴子,说字节有位员工被组内37岁的“老嫡系”针对,感觉年底就要被搞走,问有没有反击办法。
网友们的回复挺两极的,有人让他硬刚,有人劝他早点跑路。
我觉得别急着“反击”,职场不是擂台。真要对付老油子,最聪明的方式是“以静制动”。对方要搞你,多半是怕你抢风头;那你就先别硬碰,稳住口碑和成果,让上级看到谁是真干活的。
职场不是打赢谁,而是留下来。换个角度想,被针对说明你有威胁感,这本身就是一种认可。
别怕斗,但要有脑子地斗。能留在局里的,才有翻盘的机会。【备注:文末可领最新资料】
算法题:跳跃游戏
小伙伴们我先说下场景啊,昨天晚上十一点多,我在公司楼下啃冷掉的肉夹馍,手机那边小李问“哥,跳跃游戏到底怎么写才稳?”我嘴里还塞着生菜…行,我就用最接地气的说法跟你们捋一遍。
给你一个非负整数数组 nums,下标从 0 开始,nums[i] 表示从下标 i 最远能跳多远。问能不能从 0 跳到最后一个位置。能就 true,不能就 false。就这么点事儿,对吧。
别想那么学术。nums[i] 就像你手机电量条,从 i 起跳最多能跑多远。关键不在“我这一步跳多远”,而在“目前为止,我的最远可达边界在哪”。只要走到的每个位置都在“可达边界”里,旅程就能继续。
贪心思路
一路扫过去,维护一个变量 rightMost 表示目前能覆盖到的最右下标。遍历到 i 时:
如果 i > rightMost,说明都踩空了,还没走到就断电,直接 false。否则更新 rightMost = max(rightMost, i + nums[i])。提前剪枝:一旦 rightMost >= n - 1,收工,true。
这思路像啥呢?像打游戏开雾,你走到哪,能见度就延长到哪。遇到一格雾外的格子,走不到,游戏就结束。
容易翻车的点
全是 0 怎么办?只要第一个就是 0 且长度>1,那没得玩,false。 中间出现连续好多 0?只要在这些 0 之前 rightMost能越过它们,就没事;越不过就卡死。数组很大?贪心是 O(n) 一趟过,稳。
和 DP 对比一句话
DP 能做,但空间和思维都更重;这题贪心就是最简答案。面试官一般也期望你说出“维护最远覆盖”的关键词。
时间与空间
时间 O(n),空间 O(1)。就一个变量在那儿滚。
publicclassJumpGame{
// 贪心解:维护最远可达下标
publicbooleancanJump(int[] nums){
int rightMost = 0;
for (int i = 0; i < nums.length; i++) {
if (i > rightMost) returnfalse; // 走不到这里,直接GG
rightMost = Math.max(rightMost, i + nums[i]);
if (rightMost >= nums.length - 1) returntrue; // 早点收工
}
returntrue; // 能把数组走完,也说明OK
}
// 可选:给想自测的人一个main
publicstaticvoidmain(String[] args){
JumpGame s = new JumpGame();
System.out.println(s.canJump(newint[]{2,3,1,1,4})); // true
System.out.println(s.canJump(newint[]{3,2,1,0,4})); // false
System.out.println(s.canJump(newint[]{0})); // true,已经在终点
System.out.println(s.canJump(newint[]{0,2})); // false
}
}
面试时先报贪心思路,再口述两个“翻车例子”解释为何要判 i > rightMost,就显得你踩过坑。如果被追问“最远能到哪一格”,直接把 rightMost返回出去也行,改一行就完事儿。
好啦…我去热一下刚才那半个肉夹馍,等会儿有人要是问“最少跳几步”的版本,再来聊另一个贪心。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html