Python技术迷

兄弟被降职降薪,被猎头挖新公司时承诺45万年薪,结果签合同才发现这45万里有“部分“是股权激励,还得2年后才能兑现。。

刚看到个贴子:网友吐槽自家兄弟被降职降薪,好不容易被猎头挖走,新公司口头说45万年薪,结果签合同才发现有一大块是股权激励,要干满两年、条件达标才给。

Image

网友回帖我看了看,有人骂公司套路多,有人说不看清合同只能怪自己,还有人感慨:现在谈年薪,先问“到手多少”,再问“画饼多少”。

我觉得关键在认知:薪资结构写在纸上的,才是你的;股票、期权、激励,都是高风险的“也许有”。可以争取,但别当成已经进账。换个角度,遇到这种事与其一味生气,不如学会看合同、算现金流。

职场里,保护好自己,是比骂人更有用的本事。

算法题:水位上升的泳池中游泳

昨天晚上十一点多吧,我在公司楼下抽烟(别学哈),我们组小李突然丢过来一句:“东哥,这题叫啥来着…水位上升的泳池中游泳,你说是不是就硬搜?”我一听就乐了,这题特别像线上故障:水位=时间,格子里的数字=各个服务的“最低可用版本”,你想从左上跑到右下,不是你跑得快就行,是你得等依赖都满足,等到某个时间点整条链路才通。

然后我就跟他扯:你别想着每分钟模拟水位涨一格那种,太像拿日志一行行翻了,翻到天亮也翻不完。真正的思路是——你走路的时候,其实你在“赌”这条路径上最大那个高度值,越小越好。因为水位涨到那个最大值,你这条路就全通了。听着像不像“最短路”?但它不是加法最短,是“路径最大值最小”,就那种 minimax。

我当时手里还端着奶茶,差点洒键盘上,赶紧掏出笔记本打了个 Dijkstra 变体:堆里放当前能到的格子,以及到这里为止路径上见过的最大高度 cost。每次取 cost 最小的扩展,第一次拿到右下角,答案就出来了。因为你已经保证了“到终点的最大高度”最小,再往后只会更大。

代码我直接贴给你们,Python,写得有点像我语音转文字那种…反正能跑:

from heapq import heappush, heappopdefswim_in_rising_water(grid):    n = len(grid)# cost 表示:从(0,0)到当前格子,路径上的最大高度    INF = 10**18    dist = [[INF] * n for _ in range(n)]    dist[0][0] = grid[0][0]    pq = [(dist[0][0], 0, 0)]  # (cost, r, c)while pq:        cost, r, c = heappop(pq)if cost != dist[r][c]:continueif r == n - 1and c == n - 1:return costfor dr, dc in ((1,0), (-1,0), (0,1), (0,-1)):            nr, nc = r + dr, c + dcif0 <= nr < n and0 <= nc < n:                ncost = max(cost, grid[nr][nc])if ncost < dist[nr][nc]:                    dist[nr][nc] = ncost                    heappush(pq, (ncost, nr, nc))return-1# 理论上不会到这儿

你看哈,这里没有“等水位到 t 再 BFS”,而是把“等”这个动作揉进了 max(cost, grid[nr][nc]) 里:你想进一个高度更高的格子,就相当于你得把全局水位抬到更高。堆永远优先尝试“需要水位最低”的那条扩展,所以很快就收敛了。复杂度也还行,n*n 个点,每个点最多进堆几次,差不多 O(n^2 log n)。

小李当时还嘴硬:“那我用并查集也能做吧?”我说也行,你把格子按高度排序,水位从低到高把点一个个“激活”,相邻激活就 union,直到左上和右下连通。但写起来细节也不少,尤其你要处理边界,容易写着写着就开始骂自己…堆这个版本我更常用,像排查链路瓶颈一样,先把最小代价的路试出来。

哦对了,别忘了一个小坑:别用 visited 直接一标就不管了,这题虽然大概率一次到最优,但习惯上还是用 dist 判断更稳,省得以后你改题型(比如有权重变化)就踩雷。行了我先不说了,外卖到了,我再不下楼他就给我放门口被保安拿走了…

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了《python高级架构师资料合集》,总量高达650GB