Python技术迷

刚入职和组里外包骂起来了。。

刚刷到个程序员同行吐槽,说刚入职就跟组里的外包杠上了。连续三次催代码仓库,外包不是拖就是摆脸色,最后俩人直接开骂,leader还在旁边看懵了,事后安慰一番,总算让楼主能睡个好觉😅。

Image

我觉得这事吧,在技术团队里其实挺常见,尤其遇到交接不痛快的外包,大家都憋着点小心思。网友们有的说楼主刚正面刚得好,也有人觉得太冲容易被贴标签。

怎么说呢,技术交接拖拉真的是最烦的事,但直接吵起来其实性价比不高。毕竟,职场就是个大型多人副本,合作比单挑重要,真有问题还是优先走流程和汇报通道,别让自己成了“情绪价值输出机”😂。

Image

和外包互怼不值得,大不了下次多存点聊天记录,有理有据找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 全部免费领