刚入职和组里外包骂起来了。。
刚刷到个程序员同行吐槽,说刚入职就跟组里的外包杠上了。连续三次催代码仓库,外包不是拖就是摆脸色,最后俩人直接开骂,leader还在旁边看懵了,事后安慰一番,总算让楼主能睡个好觉😅。
我觉得这事吧,在技术团队里其实挺常见,尤其遇到交接不痛快的外包,大家都憋着点小心思。网友们有的说楼主刚正面刚得好,也有人觉得太冲容易被贴标签。
怎么说呢,技术交接拖拉真的是最烦的事,但直接吵起来其实性价比不高。毕竟,职场就是个大型多人副本,合作比单挑重要,真有问题还是优先走流程和汇报通道,别让自己成了“情绪价值输出机”😂。
和外包互怼不值得,大不了下次多存点聊天记录,有理有据找leader,自己也能少点内耗,心态稳住才是真的赢。【备注:文末可领最新资料】
面试题:出现次数最多的子树元素和
突然微信群里有人@我,说面试碰到一个“出现次数最多的子树元素和”的算法题,让我帮忙解释一下,顺手还丢过来一张树的结构截图——我当时正啃着鸡翅,差点手油都蹭手机上。你说这题吧,其实没多复杂,但一到现场,脑子一懵还真能卡住,特别是遇到树这种结构,真的,稍微一走神你就容易绕进去。
先说说这题想要啥意思。其实就是给你一棵二叉树,让你算算每个节点为根的“子树和”——也就是当前节点加上它下面所有子节点的值的总和。每个节点都得算一遍,然后把这些和都统计起来,最后看哪个和出现次数最多,把这些“热门和”全输出。举个简单点的场景,你半夜加班,脑袋晕乎,刷面试题,遇到这种题你千万别直接硬怼,先冷静,脑子理清楚——别问我怎么知道的,我被坑过...
你看,这题本质就两个活:第一,把每个节点的子树和都算出来,第二,统计每个和出现了几次。所以我那会在公司茶水间给那谁(我们组的老王)唠嗑的时候,边喝咖啡边在白板上画:说这种树结构,递归往下撸就完事了,啥for循环、啥while,统统靠边站,递归香得很。
递归怎么搞?你就想,每到一个节点,你递归地把左子树和右子树的和先算出来,然后加上当前节点的值,就是这个节点的子树和了。每算出来一个和,就在哈希表(dict)里记录一下,key是和,value是出现的次数。等整棵树撸完,你就有一个完整的计数字典,最后再找出现最多的那个(或者那些),收工。
我直接上代码吧,刚好我昨天深夜无聊撸了一遍,用python写的,别嫌弃写法有点糙:
# 本来还想讲点生活场景,算了,直接看代码吧...
from collections import defaultdict
classTreeNode:
def__init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
deffindFrequentTreeSum(root):
cnt = defaultdict(int)
max_freq = [0] # 用列表包装下,方便递归里引用
defdfs(node):
ifnot node:
return0
left_sum = dfs(node.left)
right_sum = dfs(node.right)
s = node.val + left_sum + right_sum
cnt[s] += 1
if cnt[s] > max_freq[0]:
max_freq[0] = cnt[s]
return s
dfs(root)
# 结果整理一下
return [k for k, v in cnt.items() if v == max_freq[0]]
你看,整个逻辑是不是就很直给,没有什么复杂的骚操作。其实你要真赶上业务代码,那谁还管这么多,写快点就行,主要还是让面试官看得懂,别装高手。
对了,别以为这题就是单纯考算法,有时候面试官还会问你空间复杂度、递归栈啥的。你就老实说,空间复杂度主要哈希表和递归栈两块,O(n)那样子,没啥可躲的。实在懒得说,就说“够用了,真上线有问题再优化呗”——虽然这么说不太礼貌,但有时候面试气氛好,可以装一下皮。
-END-
我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领