程序员老鬼

30岁阿里P7,边缘团队很难晋升,看了看个人所得税去年税前总收入180+,这个收入算高算低呀

刚看到个贴子:30岁阿里P7,在边缘团队晋升难,一看个税记录去年税前180多万,问这个收入算高算低。

Image

网友回帖两派,一派说“普通人干一辈子也拿不到”,一派说“大厂卖命钱,不值”。我觉得这事吧,别光看数字,也别只看年龄和职级。

放在全国范围,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);
    }
}

这段逻辑真的就几个点:

  1. 先算出自己到终点的距离 myDist
  2. 循环 ghosts
  3. 只要发现有哪个鬼的 ghostDist <= myDist,当场返回 false
  4. 循环跑完都没撞上这种情况,返回 true

没有多余 if,没有花里胡哨的数据结构,也不用什么 BFS / Dijkstra, 就纯“谁离终点曼哈顿距离更小”的对比。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领,也可以链接我微信:hls404