网友:月薪100万,你能接受996吗?
刚看到个贴子,说“月薪100万,你能接受996吗?”这问题一出,评论区直接炸了。有人说那点钱买命都行,有人说再多钱也不能拿健康换。
月薪100万不是幻想级别的数,那是财富自由的门票。真有人给我这价,我估计连工位都得铺床垫,24小时在线也行。但问题是,现实里给你996的公司,往往不配给你100万。多数人加班到秃头,拿到手还不够付房贷。
网友的玩笑挺好笑,但也揭了个真相——大部分人不是怕996,而是怕“又苦又穷”。如果真有一天能做到干一份工作,拿一份对等的报酬,那996也就不叫剥削,叫选择。【备注:文末可领最新资料】
面试题:复数乘法
小区楼下便利店等外卖那会儿,我掏出本子随手写了两行,嗯,复数乘法这事儿其实就一条:((a+bi)(c+di)=(ac-bd)+(ad+bc)i)。别被字母吓到,a、b、c、d 都是实数(在算法题里多半是整数),i 是虚数单位,i²=-1。就这么一条公式,能打遍大多数题。
你可以把复数看成“实部”和“虚部”两格的向量,只不过乘法不按点积那套来,它有个 i²=-1 的“翻转”。所以展开后四项:ac、adi、bci、bdi²,最后那项因为 i²=-1 变成 -bd,合并同类项就得到上面那条公式。脑子里过一遍,手就不抖了。
两种写法
有的题输入是字符串 "1+-1i" 这种,有的直接给 a、b、c、d。我放两版,先“手工版”,更稳;再“内置版”,更省心。
defmultiply_complex_str(x: str, y: str) -> str:
# 形如 "a+bi" 或 "a-bi",a、b 可能是负数
defparse(s: str):
s = s.strip()
# 去掉末尾的 'i'
assert s.endswith('i')
s = s[:-1]
# 找到分隔符:从后往前找 '+' 或 '-' 的位置(跳过首位的符号)
idx = max(s.rfind('+', 1), s.rfind('-', 1))
a = int(s[:idx])
b = int(s[idx:]) # 含符号
return a, b
a, b = parse(x)
c, d = parse(y)
real = a * c - b * d
imag = a * d + b * c
returnf"{real}+{imag}i"
# 小测
print(multiply_complex_str("1+1i", "1+1i")) # 0+2i
print(multiply_complex_str("1+-1i", "1+-1i")) # 0+-2i
print(multiply_complex_str("-3+2i", "5+-7i")) # 1+-41i
如果题目不强制字符串格式,Python 自带 complex 其实很好用,但注意:它是浮点实现,整数范围大时依然没问题,但涉及特别大的整数精确度、或需要严格的字符串格式,就建议用上面的手工版。
defmultiply_complex(a: int, b: int, c: int, d: int) -> tuple[int, int]:
# (a+bi)*(c+di) -> (real, imag)
return a*c - b*d, a*d + b*c
# 或者偷懒用内置(演示思路,不推荐在“严格格式题”里用)
defmultiply_using_builtin(a: int, b: int, c: int, d: int) -> complex:
return complex(a, b) * complex(c, d)
常见坑
就是那个…字符串解析最容易翻车: 1)"1+-1i" 这种双符号很常见,不要 split('+');从右往左找最后一个 + 或 - 的位置更稳。 2)一定要先去掉末尾 i,否则 int() 直接报错。 3)空格要 strip(),有些评测会给你“善意的空格”。 4)别用浮点转回字符串,(0.0+2.0j) 这种格式不对,评测不认。 5)大数不必慌,Python 的 int 是大整数,手工版是纯整数运算,不丢精度。
复杂度、边界和一点延伸
复杂度是常数级,四次乘法,两次加减,O(1)。边界上,零值(如 0+0i)、单边为零、负数、结果实部或虚部为 0,都能自然覆盖。延伸一下,如果要做多项式的复数快速傅里叶变换(FFT),里面也是这套乘法在跳舞;再远一点,计算机图形里的旋转,复数乘法也能玩出味道。嗯,就这样,我外卖到了,先吃口饭再回消息哈…
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领