鹅厂员工在内部圈吐槽:研发中心有好几位组长压根不会写代码,那技术组长的核心竞争力到底是啥?
刚看到个鹅厂的贴子,说研发中心不少组长不会写代码,引发大家热议。网友有人吐槽这是“空降管理”,有人觉得只要能搞定资源协调也算本事。
从程序员的角度看,我觉得核心问题在于 技术管理和技术实现是两码事。组长不一定要手敲代码,但至少要懂逻辑、能评估方案,不然就容易成甩锅机器。毕竟带队不是写PPT,而是要能拍板、兜底。
当然,换个角度想,组长也可能是被公司定位成“项目经理+接口人”,他们的价值可能更多在资源协调、推动跨部门合作。问题是,如果完全不懂技术,那团队遇到瓶颈时,他就很难判断优先级和风险,这才让大家心里不服。
所以我更认同一种平衡思路:技术组长要么会写代码,要么能看懂代码,最起码要能理解问题背后的复杂性。否则,组员和领导之间迟早会出现裂痕。【备注:文末可领最新资料】
面试题:打家劫舍
昨天晚上十一点多,在公司楼下吹风,手里奶茶已经化了冰,我还在想那个“打家劫舍”…就是 House Robber,那道老朋友。有人在群里问我:“东哥,这题是不是贪心?”我当时差点笑出声——别贪,贪就挨打。它更像是存钱的取舍:今天拿了,明天紧着点;今天忍一忍,后天可能更肥。
一排房子,每个房子有现金,不能抢相邻。目标就是把总额攒到最大。你们知道吧,这种“相邻互斥”的味儿,典型的动态规划。靠前面的状态喂后面的选择,嗯…像攒体力打副本一样。
设 dp[i] 表示前 i 个房子的最优金额。你到第 i 个房子面前,只有两种姿势: 1)不抢它,那就继承 dp[i-1]; 2)抢它,那前一个不能抢,金额是 dp[i-2] + nums[i]。 取最大的那个就行。所以转移就是:dp[i] = max(dp[i-1], dp[i-2] + nums[i])。 等等名字别纠结,nums[i] 我是按 0 开始,脑子清爽点。
但我不想开整条数组…手机内存也要省着用嘛,所以只留两格:prev2 对应 dp[i-2],prev1 对应 dp[i-1]。往前滚,像窗口滑过去,省心。
defrob(nums):
# 边界先兜住
n = len(nums)
if n == 0:
return0
if n == 1:
return nums[0]
prev2 = 0# dp[i-2]
prev1 = 0# dp[i-1]
for x in nums:
take = prev2 + x # 抢当前
skip = prev1 # 不抢
cur = max(take, skip)
prev2, prev1 = prev1, cur
return prev1
# 小测一下
if __name__ == "__main__":
print(rob([2,7,9,3,1])) # 12
print(rob([1,2,3,1])) # 4
print(rob([])) # 0
就这个,没花哨,O(n) 时间,O(1) 空间。跑一遍数组,每一步只看两格历史。像翻牌记忆,不用背整副牌。
有同学会卡在“全是零”和“单个元素特别大”的心理阴影里。其实上面代码都兜住了:空数组直接 0;只有一个房子就拿它;全零嘛,最大也就是 0,别纠结。
还有个常见变体,环形房子(首尾也相邻)。这个别慌,把它拆成两次线性:
抢 1 到 n-1(丢掉最后一个); 抢 2 到 n(丢掉第一个)。 两次结果取大值。用上面 rob的核心当子过程就行。我懒得贴第二段代码了,套壳就能跑。
为什么不是贪心
有人说“看哪个大就抢哪个”。不行的呀,比如 [2,1,1,2],你前后两个 2 都想要,中间那俩 1 就变绊脚石了。纯贪心容易在局部被“骗”,DP 才能把全局关系捋顺。
我每次做这题,都把自己当成晚上巡逻的保安…不是,那个,比喻错了…当成预算管家更顺:拿这个就不能拿下一个,你手里的预算曲线别断,稳一点,一步步滚过去。等回到宿舍看统计,金额自然是最大。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领