30岁阿里P7,边缘团队很难晋升,看了看个人所得税去年税前总收入180+,这个收入算高算低呀
刚看到个贴子:30岁阿里P7,在边缘团队晋升难,一看个税记录去年税前180多万,问这个收入算高算低。
网友回帖两派,一派说“普通人干一辈子也拿不到”,一派说“大厂卖命钱,不值”。我觉得这事吧,别光看数字,也别只看年龄和职级。
放在全国范围,180万已经是绝大多数人仰望的天花板了;但放到一线互联网和P7这个位置,只能算中上水平,谈不上“暴富”。关键在于:你为这180万付出了什么——时间、健康、家庭,还是职业安全感?
边缘团队晋升慢,其实比收入高低更要紧。如果看重成长和上限,就要想想要不要换到业务更核心的地方;如果主线任务是“先搞钱”,那就接受当下的强度,把钱攒住、能力练好。
面试题:逃脱阻碍者
这题名字叫“逃脱阻碍者”,看着像啥高大上的博弈论,其实吧…就是谁跑得快的问题,别被吓住
你站在二维平面原点 (0,0)。 终点在某个坐标,比如 target = [tx, ty]。
有一堆“阻碍者”(可以理解成鬼、敌人啥的),每个也在一个坐标上:ghosts[i] = [gx, gy]。
规则特别简单:
你和阻碍者每一秒都可以往上下左右走一步(曼哈顿距离那种走法) 谁先到终点谁牛 只要有任意一个阻碍者,在你到终点之前或刚好同时到达终点,你就算没逃脱 如果你有办法保证,所有阻碍者都来不及到终点,那就返回 true,说你能跑掉
题目问的就是:能不能逃脱?
咋想?别一上来就 BFS
很多同学一看就条件反射: “哎呀,图啊,最短路啊,BFS 走起!”
其实完全不用。 因为——大家的移动规则一模一样:
一秒一步 只能上下左右
那从一个点走到另一个点的最快时间是多少? 就是两点的曼哈顿距离:
dist((x1,y1), (x2,y2)) = |x1 - x2| + |y1 - y2|
你从 (0,0) 到 target 的最短时间:
myDist = |tx| + |ty|
任意一个阻碍者,从 (gx, gy) 到 target 的最短时间:
ghostDist = |gx - tx| + |gy - ty|
关键结论就一句话:
如果有任何一个阻碍者,
ghostDist <= myDist,那你无论怎么玩路线,都没法保证自己先到终点。
为啥? 因为大家速度一样,它到终点的最少步数都不比你多, 最坏情况:它直接蹲在终点等你,你一落点就被抓了,凉凉。
反过来:
如果所有阻碍者的
ghostDist都大于你的myDist,那你总能比他们先到终点,安全逃脱。
至于你具体往左先走一步,还是往右先绕个圈,其实不重要, 我们只要比的是“理论最短时间”,不用真去走一遍。
所以整题就变成一句人话:
算出你到终点的曼哈顿距离,看每个阻碍者到终点的曼哈顿距离, 只要出现一个
<=你,就GG;否则就能逃。
时间复杂度这种,想都不用多想
假设有 n 个阻碍者:
每个算一次曼哈顿距离,都是 O(1) 操作 一共算 n次,所以总时间复杂度:O(n)只用几个整型变量,额外空间:O(1)
面试官问复杂度的时候,你就这两句丢过去就行。
classSolution{
// 判断能不能逃脱阻碍者
publicbooleanescapeGhosts(int[][] ghosts, int[] target){
// 我从 (0,0) 到 target 的最短步数
int myDist = manhattan(0, 0, target[0], target[1]);
// 遍历每一个阻碍者
for (int[] g : ghosts) {
int ghostDist = manhattan(g[0], g[1], target[0], target[1]);
// 只要有一个阻碍者比我快,或者跟我一样快到终点,我就逃不掉
if (ghostDist <= myDist) {
returnfalse;
}
}
// 所有阻碍者都比我慢,那我肯定可以先到终点
returntrue;
}
// 曼哈顿距离的小工具方法
privateintmanhattan(int x1, int y1, int x2, int y2){
return Math.abs(x1 - x2) + Math.abs(y1 - y2);
}
}
这段逻辑真的就几个点:
先算出自己到终点的距离 myDist循环 ghosts 只要发现有哪个鬼的 ghostDist <= myDist,当场返回false循环跑完都没撞上这种情况,返回 true
没有多余 if,没有花里胡哨的数据结构,也不用什么 BFS / Dijkstra, 就纯“谁离终点曼哈顿距离更小”的对比。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html