Python技术迷

公司复工,第一件事是裁员,朋友在裁员名单里,去找hr。HR直接PUA朋友说,公司不容易,公司怎么培养你

最近刷帖子,看到一个挺扎心的。说是朋友公司一复工,第一件事不是开会,不是聚餐,直接上裁员大礼包,朋友不幸躺枪,被裁名单里有他。

Image

心里不舒服,去找HR理论,HR也一套话术:“公司多不容易,培养你多费劲”,但是赔偿一个字没提。

朋友想走劳动仲裁吧,又怕公司报复,纠结得不行。我觉得啊,这种时候别心软,赔偿该争取就争取,劳动法是护身符,走仲裁公司也不能随便乱来。很多网友也说了,补偿合法合规,公司再惨也不能拿员工祭天。

Image

要是不给补偿,真得去仲裁,别被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高级架构师资料合集》。

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB,全部免费领取