公司复工,第一件事是裁员,朋友在裁员名单里,去找hr。HR直接PUA朋友说,公司不容易,公司怎么培养你
最近刷帖子,看到一个挺扎心的。说是朋友公司一复工,第一件事不是开会,不是聚餐,直接上裁员大礼包,朋友不幸躺枪,被裁名单里有他。
心里不舒服,去找HR理论,HR也一套话术:“公司多不容易,培养你多费劲”,但是赔偿一个字没提。
朋友想走劳动仲裁吧,又怕公司报复,纠结得不行。我觉得啊,这种时候别心软,赔偿该争取就争取,劳动法是护身符,走仲裁公司也不能随便乱来。很多网友也说了,补偿合法合规,公司再惨也不能拿员工祭天。
要是不给补偿,真得去仲裁,别被PUA。但同时,别把精力全耗在这儿,赶紧找下家才是正事。公司真裁你,说明可有可无,咱也别多留恋,留条后路比啥都强。
算法题:平衡二叉树
平衡二叉树这个词,程序员谁还没遇到过?但真让你手写个判断平衡的函数,保不齐有人脑子一抽,写成了判断二叉搜索树。别笑,这事我真干过,面试官还特意提醒:“兄弟,平衡二叉树,不是二叉搜索树。”那一刻,我怀疑我是不是进错了考场。
聊回正题,什么是平衡二叉树?官方定义:一棵二叉树每个节点的左右子树高度差不超过1。这听着简单,写代码的时候脑子就开始打架:到底是先算高度,还是先判断平衡?其实这俩是绑在一块儿的。递归走起,一边算高度一边判断平衡,效率杠杠的。
来点实在的,Python代码这样写:
classTreeNode:
def__init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
defisBalanced(root):
defcheck(node):
ifnot node:
return0# 空节点,高度为0
left = check(node.left)
if left == -1: # 左子树不平衡
return-1
right = check(node.right)
if right == -1: # 右子树不平衡
return-1
if abs(left - right) > 1:
return-1# 当前节点不平衡
return max(left, right) + 1# 返回当前节点高度
return check(root) != -1
代码简单,但不失优雅。最关键的点在于,递归里我们不仅在算高度,还顺带判断了平衡。一旦发现某个子树不平衡,直接返回-1,后面全省了。这样一趟递归下来,时间复杂度O(n),每个节点就被访问一次,谁看了不说一句“真香”?
有朋友可能说,能不能不用递归,来个迭代的?理论上可以,但不好写,没必要给自己加戏。二叉树这种结构,递归才是最优雅的打开方式,毕竟每个节点都要处理一遍,深度优先走一圈,顺理成章。
当然,写完函数不测是不行的,程序员嘛,手一抖就出bug。给个小测试:
# 构建一个平衡二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(2)
root.left.left = TreeNode(3)
root.left.right = TreeNode(3)
root.left.left.left = TreeNode(4)
root.left.left.right = TreeNode(4)
print(isBalanced(root)) # False,不平衡
这个例子其实挺典型的,左子树往下长得太猛,明显失衡。跑一下函数,返回False,稳。
写这类题,核心其实不是代码多复杂,而是思路清不清楚。高度和判断平衡这俩事,合二为一,一趟递归解决,不但高效,还不容易错。写多了你就发现,所谓的算法题,逻辑才是最难的,代码只是最后一步。
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。