某大厂员工吐槽,月薪2万多,每天工作11个小时,公司反而舍不得裁了我,身边有同事被裁都拿了N+1~
刚刷到个贴子:某大厂员工说自己月薪2万多,每天干11个小时,公司舍不得裁他,反而羡慕那些拿N+1走人的同事。
作为程序员,我的第一反应是:这就是典型的性价比困境。公司觉得你还能干活,稳定产出,就算成本高一点也划算;可对个人来说,工时拉长、成长停滞,反而像被“续命”一样困在原地。
网友有的说“别矫情,2万多很香”;也有人觉得“N+1走人才是爽局”。我觉得吧,工资就像内存,容量大是好事,但要看系统是不是一直在内耗。如果你天天满负荷跑,迟早蓝屏。
从程序员角度讲,长期过载只会透支身体和技术热情,错过了学习和跳槽窗口。羡慕N+1没错,但更重要的是给自己留Buffer:要么提升核心竞争力,要么规划退路。【备注:文末可领最新资料】
面试题:坏了的计算器
就是那个…坏了的计算器,对吧。屏幕好着呢,但按钮只剩俩:把数×2,或者把数−1。给你起始值 X,要凑到 Y,问最少按几下。我们组小李说他想从 X 往上怼,一会儿翻倍一会儿减一,结果越写越乱。我当时手冻得直哆嗦,就顺嘴说:别顺着走,倒着来。
为啥倒着?因为 ×2 的逆操作清爽:能整除就直接 /2。而 −1 的逆操作是 +1,也很自然。于是从 Y 往回逼近 X 更好掌控。
具体咋搞: 如果 Y 比 X 大,那就看 Y 的奇偶。
Y偶数就对半砍,因为它多半是别人翻倍出来的。Y奇数就先+1,把它凑成偶数再砍。 这样一来,Y会唰唰往下掉。等掉到Y <= X时,没必要再玩什么花活了,只能不停-1(倒推视角就是+1)把Y补到X,这个步数就是X - Y。 整个过程,操作数像是被奇偶性“托运”,不会走弯路。对吧,这点挺妙。
举个小例子哈:X=3, Y=10。倒推:10 偶→5(1步);5 奇→6(2步);6 偶→3(3步)。到 3 就停,正好等于 X,三步,不需要多按一下那种犹豫。
defbroken_calculator(X: int, Y: int) -> int:
steps = 0
while Y > X:
if Y % 2 == 0:
Y //= 2
else:
Y += 1
steps += 1
# 现在 Y <= X,只能把 Y 一步步加到 X(正向就是 X 减到 Y)
return steps + (X - Y)
我昨晚十一点多回家测了几组,像 X=5, Y=8,倒推:8→4(1),4<=5 停,最后补 (5-4)=1,总共 2 步;正向要不就是 5→10→9→8,三步呢。你看,省。
有人会想“那我可不可以一直翻倍直到超过 Y 再减?”听着挺直观,但会在一些奇怪的 Y 上多走路。倒着做的贪心有个隐含保证:每次不是“最佳就近”,就是为“最佳就近”做准备(奇数先 +1 变偶)。复杂度也还行,主要靠 /2 在砍高度,差不多是 O(log Y),后面那段线性补差最多 X-Y 次,但只在 Y 已经不大于 X 时发生,所以总是很快。
对了对了,边界别忘:
X >= Y时,答案直接是X - Y,因为只能一直-1。X、Y为 1 这种极小值也照样OK,不用特别分支。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领