互联网裁员,先裁掉效率低的,还是潜力小的?
这个问题一看就不是HR提的,而是打工人饭后消食顺便思考了一下人生。
裁员先裁效率低的,听起来挺合理的,但你想想,那些效率低的,要么是系统熟练度不够、要么是代码像迷宫,自己进了都出不来……这种人真裁了,系统bug都没人背锅了。
再说潜力小的,问题来了,潜力这玩意儿你怎么衡量?难不成靠星座?“哎,这位双鱼座,看起来没啥进取心,淘汰。”
我觉得吧,互联网裁员很多时候压根不是“裁谁更合理”,而是“老板一拍脑袋,顺手一划名单”,甚至还得看看谁年终奖高、谁不加班、谁工位太靠窗。
所以要我说,别研究“先裁谁”了,先研究怎么在年会上跳舞最不尴尬,说不定还能多活一轮。
【备注:文末可领最新资料】
算法题:
数字范围按位与
题目是这样的:给定两个整数
也可以看我写的这篇文章《 DeepSeek满血复活,直接起飞! 》来进行本地搭建。
算法题:
数字范围按位与
题目是这样的:给定两个整数
left
和
right
,返回它们范围内所有数字按位与(AND)的结果。
第一次看到这个题的时候,我心里就蹦出来一句话:
暴力解法你别试,服务器都得哭。
不少人上来第一反应就是写个循环,直接从
left
到
right
全部
&
一遍,Python 三行代码:
def rangeBitwiseAnd(left: int, right: int) -> int:
result = left
for num in range(left + 1, right + 1):
result &= num
return result
这个写法对于小范围还行,比如从 5 到 10,跑得飞快。但如果你试试
left = 1
,
right = 2147483647
,那你这脚本不是在执行,就是在死的路上反复横跳。
所以这题根本就不该靠蛮力,要用点脑子。我们看位运算,重点其实在“公共前缀”——只要
left
和
right
的二进制高位开始不同了,那往后的按位与一定是 0。
比如:
left = 26 = 11010
right = 30 = 11110
它们从高位看,第一个不同的位是在第3位(从左往右),所以之后所有位都可能在范围内变成0,最终的结果就是公共前缀:
11010 & 11011 & 11100 & 11101 & 11110 = 11000
也就是
24
。
我们怎么找这个公共前缀?可以用位移,不断右移直到两者相等,再把结果左移回来。Python代码如下:
def rangeBitwiseAnd(left: int, right: int) -> int:
shift = 0
while left < right:
left >>= 1
right >>= 1
shift += 1
return left << shift
逻辑很简单粗暴:只要
left != right
,说明这俩数还有不一致的位,就右移,一直到变一样为止。最后再恢复位数,返回公共前缀左移后的结果。
这个方法的时间复杂度是 O(1),因为整数最多32位,移不了几次,非常稳定。
我有一次面试真被问到了这题,对方刚说完题,我直接秒回这个版本,还顺嘴讲了为啥不能暴力。对面面试官都惊了,说“你这是提前偷看题了吧”。我笑着说:“没有,我只是裁过人。”(误)
总结一下:别硬刚,按位操作本质靠规律,多从二进制思维切入,少敲 for 循环省心多了。
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:
https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《 DeepSeek满血复活,直接起飞! 》来进行本地搭建。
对编程、职场感兴趣的同学,大家可以联系我微信: golang404 ,拉你进入“程序员交流群”。🔥 虎哥私藏精品 热门推荐 🔥 虎哥作为一名老码农,整理了全网最全 《python高级架构师资料合集》 。 资料包含了 《IDEA视频教程》 、 《最全python面试题库》 、 《最全项目实战源码及视频》 及 《毕业设计系统源码》 ,总量高达 650GB , 全部 免费领取