Python技术迷

外企8000工资,干8000的活,国企5000工资,踏实工作不犯错就可以了,私企3000工资,你要知足懂感恩~

刚刷到一个讨论外企、国企、私企薪资差异的贴子。大概意思就是:外企给你8000,要你干满8000的活;国企5000,只要不出错就能混;私企3000,还要你感恩戴德。

Image

作为程序员,我觉得这事挺真实。外企像写代码跑单元测试,一行bug都不放过,要求严格但回报对等;国企更像维护遗留系统,活儿简单稳定,少动多稳;私企则像赶工期项目,不仅要写代码,还得帮测试、运维甚至扫地,最后还被要求喊“谢谢老板”。

网友有人说国企最舒服,也有人羡慕外企的高薪。但我觉得关键还是性价比。工资不只是钱,还对应了你的压力、成长和自由度。每份工作都是一个trade-off,没有十全十美的环境。

所以别只盯着工资数字,想清楚自己更在乎什么:稳定?钱?成长?选定方向,再努力把代码写漂亮点,哪怕debug人生也能少点报错。【备注:文末可领最新资料】

面试题:等式方程的可满足性

昨天晚上十一点多,我在公司楼下吹风,手机一震,我们组那个小李又问:“哥,那个‘等式方程的可满足性’咋写啊?”我当时困得眼冒金星,但这题我熟,脑子一热就开始嘟囔——你们知道吧,就是一堆像 a==b、c!=d 这种小等式,看它们能不能同时成立。别想太玄学,落地就是看“相等”能不能把字母粘成一坨,“不等”会不会撞上同一坨,对吧。

变量就26个小写字母,像同学分组那样,“==”把人拧成一个组,“!=”要求两人别在一个组。要是最后某条“!=”发现两人其实早被我们拉到同一组,那就崩了,返回假;否则就行。有人会想用图搜索,其实也行,但这题更顺手的,是并查集——Union-Find,名字有点拗口,意思就是“合并”和“找老大”。别纠结,思路特别顺手。

我一般分两趟走路。先把所有“==”扫一遍,能合就合,把能粘的全粘上;再把“!=”过一遍,看看这俩是不是同爹(同代表),是的话就翻车,不是就继续。为啥要两趟?因为“==”有传递性,a==b, b==c,那 a==c 也就跟着成立了,你先把大团结做完,再挑“!=”刺更稳。复杂度?基本 O(n α(n)),你就当是接近 O(n),反正跑很快。等等我接个电话……好了回来。

classUnionFind:
def__init__(self, n=26):
        self.p = list(range(n))
        self.r = [0]*n  # rank
deffind(self, x):
# 路径压缩,省劲儿
if self.p[x] != x:
            self.p[x] = self.find(self.p[x])
return self.p[x]
defunion(self, a, b):
        ra, rb = self.find(a), self.find(b)
if ra == rb: 
return
# 按秩合并,别长歪了
if self.r[ra] < self.r[rb]:
            self.p[ra] = rb
elif self.r[ra] > self.r[rb]:
            self.p[rb] = ra
else:
            self.p[rb] = ra
            self.r[ra] += 1

defequationsPossible(equations):
    uf = UnionFind()
# 先粘“==”
for eq in equations:
if eq[1:3] == "==":
            a = ord(eq[0]) - 97
            b = ord(eq[3]) - 97
            uf.union(a, b)
# 再查“!=”
for eq in equations:
if eq[1:3] == "!=":
            a = ord(eq[0]) - 97
            b = ord(eq[3]) - 97
if uf.find(a) == uf.find(b):
returnFalse
returnTrue

有同学把两趟顺序写反了,!= 先检查就会漏掉后续“==”形成的传递关系,结果乌龙一片。还有那个……名字打错,rank 写成 rnak,我昨晚就这么卡了五分钟,尴尬。再就是 Python 里字符转索引,ord('a') 是97,别写魔法数字我知道,但这题就26个字母,写个 -97 图个快,嫌丑你可以预先 base = ord('a')。哦对,还有边界:如果全是“!=”,直接真;如果有 a==a 这种,嗯,没事儿,本来就真;a!=a 一眼假。

行了我不多说,这玩意儿面试里挺香,思路也干净:先合再挑刺。啊对对,有人问图法?也可以:把“==”连边做连通分量,“!=”就看是不是同一分量,逻辑一模一样。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领