年薪 300万大厂程序员被女友炫富害惨,直接失业。。
刚看到个贴子,说某游戏大厂程序员年薪300万,因为女友晒红包炫富,被前同事举报直接失业了。说实话,这事挺唏嘘的。
我觉得这事吧,说到底是“炫”惹的祸。在这个信息爆炸的年代,哪怕你啥都没说,只要你身边人动动嘴,也能把你送上热搜。
程序员本来是隐形高薪职业,靠的是“低调稳”。结果被女友一通高调操作,直接成了众矢之的。
网友们的回复我看了看,有人怪前同事“心眼小”,也有人骂女友“没边界感”。但我的看法是——职场最怕的就是“引火烧身”。你赚再多钱,只要不合领导的“价值观”,或者动了别人的蛋糕,随时可能出事。
挣钱是本事,炫耀是风险。尤其高薪岗位,低调一点,才能走得更远。【备注:文末可领最新资料】
面试题:K 个关闭的灯泡
灯泡问题这种题啊,说实话,看着是个脑筋急转弯,实际背后还是纯数学规律那一套。如果你第一眼看到题目是“有 N 个灯泡,从 1 到 N 编号,一开始全是关的,每次第 i 轮操作就会翻转编号为 i 的倍数的灯泡,问最后有多少个灯泡是开的”,别急着动手写代码,先闭上眼想十秒钟:它让你干的,其实是统计某个数被几个数整除的问题。
举个栗子,第 6 个灯泡会在第 1、2、3、6 轮被操作,每次翻转一下,最后到底是开还是关?四次,偶数次,回到初始状态“关”。
而有意思的是,只有那些被操作了奇数次的灯泡最后是“开”的。那么哪些灯泡会被翻转奇数次?谜底揭晓:就是那些编号是完全平方数的灯泡。
为啥?因为一般来说,一个数的约数都是成对出现的,比如 12 的约数是 (1,12), (2,6), (3,4),但像 16 这种,(4,4) 是重复的,所以成对数里多了个重复,就成了奇数个了。
所以我们就能知道最后会亮的灯泡个数,其实就是从 1 到 N 中有多少个数是完全平方数。直接开个根号取整就完了。
Python 代码就这样写,简单粗暴:
import math
defbulb_switch(n: int) -> int:
return int(math.sqrt(n))
print(bulb_switch(25)) # 输出是5,因为1,4,9,16,25是亮的
就这一个函数,不到三行,干掉一整题。
有同学可能还不服:“这么简单,面试官会满意吗?”我告诉你,如果你现场能想出完全平方数这个点,面试官眼睛都会亮一下 👀。不是所有人都能一下子想到这个数学规律的,大多数人一上来就是拿 list 模拟翻转,结果写了一大坨时间复杂度 O(n²) 的代码,把自己搞崩了。
当然啦,要是你闲得无聊,真想“暴力美学”一波,也可以写个模拟版玩玩:
defbulb_switch_naive(n: int) -> int:
bulbs = [0] * (n + 1) # 0 表示关,1 表示开
for i in range(1, n + 1):
for j in range(i, n + 1, i):
bulbs[j] ^= 1
return sum(bulbs)
print(bulb_switch_naive(25))
不过这个算法就真不推荐上战场了,面试官要是问你时间复杂度,估计你得吱吱唔唔半天。
说到底,这道题教会我们的不只是解法,还有个很重要的道理:做题不能光靠写代码,有时候静下心想一想数学模型,才是真正“降维打击”。
就像我之前在项目里遇到一个分片数据排序优化的问题,团队里几个兄弟都在琢磨怎么在多个 shard 上并行 merge,我最后把问题抽象成了多路归并,借了个最小堆一搞,结果性能直接提升了 2 倍。后来我们 Leader 看完代码直接说:“这写法很优雅。”😎
所以啊兄弟们,刷题不是为了把代码写得多快,而是为了把脑子练得更快。希望你们下次再遇到这种“看起来是操作题,其实是数学题”的玩意儿,别再一头扎进代码堆里去了。先抬头看看题目背后有没有数学的小尾巴,说不定就摸到解法的关键了 🔑
讲到这儿你可能已经知道了:最后亮着的灯泡,就是那些编号是完全平方数的灯泡。而你要做的,仅仅是数一下有几个平方数而已。是不是比想象中简单多了?💡
-END-
我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领