离开鹅厂之后,35+同事们的就业现状
刚看到个贴子,说的是离开鹅厂后的35+同事们现状。有人去了字节组AI团队,有人准备回老家找开发岗,还有人拿着两百多万存款打算做外包,也有的干脆出国重新开始。看完挺感慨的。
网友们都在讨论“中年危机”,但在我看来,这更像是“重新定义安全感”。互联网的黄金时代过去了,很多人不得不重新调整自己的节奏。继续拼的不是运气,而是适应力。
从我的角度看,那些能主动转型、敢跳出舒适圈的,反而更有出路。技术淘汰快,但人只要不躺平,永远有下一站。哪怕是去小厂、外包、回老家,都是一种务实的选择。
说到底,职场没永远的铁饭碗,但有永远的学习力。时代变了,但只要还愿意折腾,就不会被淘汰。【备注:文末可领最新资料】
面试题:从字符串生成二叉树
昨晚十一点多我在客厅打游戏…哎对对,先别喷,一边玩一边给我们组那个小李讲题,讲着讲着就扯到“从字符串生成二叉树”,他非说用递归写麻烦。我就顺手敲了个 Python 版,思路很直白,给你们也说下,口味清淡点,别太学术。
输入怎么约定?
就是那个…常见的 LeetCode 风格哈:层序,逗号分隔,空节点用null。比如:"1,2,3,null,4,null,5" 表示根是 1,下一层是 2 和 3,2 的左子是空、右子是 4,3 的右子是 5。空格随便有都行,我们会 strip。空串或者全是空也要能稳住,不崩。
层序就用队列嘛。先把字符串切成数组 tokens,建根节点入队;然后每次从队列取一个父节点,给它塞左孩子、再塞右孩子,指针往后推。遇到null就跳过。整个流程像发快递,按顺序配对,不要越界…嗯就这样。
Python 代码(可直接跑)
from collections import deque
from typing import Optional, List
classTreeNode:
def__init__(self, val: int,
left: Optional['TreeNode']=None,
right: Optional['TreeNode']=None):
self.val = val
self.left = left
self.right = right
def__repr__(self):
returnf"TreeNode({self.val})"
defparse_level_order(data: str) -> Optional[TreeNode]:
# 清洗输入
ifnot data ornot data.strip():
returnNone
tokens = [t.strip() for t in data.split(',')]
# 全空直接返回
if all(t == ""or t.lower() == "null"for t in tokens):
returnNone
defto_node(tok: str) -> Optional[TreeNode]:
if tok == ""or tok.lower() == "null":
returnNone
# 允许正负号和十进制
return TreeNode(int(tok))
root = to_node(tokens[0])
if root isNone:
returnNone
q = deque([root])
i = 1
n = len(tokens)
while q and i < n:
parent = q.popleft()
# 左孩子
if i < n:
left = to_node(tokens[i])
i += 1
parent.left = left
if left:
q.append(left)
# 右孩子
if i < n:
right = to_node(tokens[i])
i += 1
parent.right = right
if right:
q.append(right)
return root
# 小工具:再把树层序打印回去,看看是否一致
defto_level_order(root: Optional[TreeNode]) -> str:
ifnot root:
return""
q = deque([root])
out: List[str] = []
while q:
node = q.popleft()
if node:
out.append(str(node.val))
q.append(node.left)
q.append(node.right)
else:
out.append("null")
# 末尾多余的 null 去掉
while out and out[-1].lower() == "null":
out.pop()
return",".join(out)
我刚才在公司楼下抽烟的时候(别学),拿这个测了个:"1, 2, 3, null, 4, null, 5" → 生成树后再to_level_order一下,能回到 "1,2,3,null,4,null,5",就说明配对没跑偏。有人问负数行不行?行,"-10,9,20,null,null,15,7" 也稳。
小坑
呃…有三个点你们注意下: 1)输入有多余逗号,比如结尾逗号,split 后会有空字符串,按null处理就好。 2)根节点就是null,那直接返回 None,不要硬建个“空根”。 3)tokens 不够长的时候(比如只给了左孩子),循环里记得每次都判 i < n,不然越界警告就来了。
复杂度
遍历每个 token 最多一次,时间 O(n),队列最多装 n/2 个节点,空间 O(n)。够用了,别抠这个…对吧。
行了我先去回个消息…哦对,有人要括号表达式那种1(2(,4),3)?这个也能写,用指针递归按val(left,right)解析就行,不过今天主题是层序版本,先这样,回头我再把另一个版本扔群里。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领