知乎高问:965月薪18k有必要跳槽大厂30k吗?
刚看到个贴子,有人问:965月薪18k,要不要跳槽去大厂拿30k?现在这话题挺炸的。说实话,谁不心动呢?但看完细节我反而觉得,这事得掂量掂量。
现在的公司稳、轻松、关系融洽,这是不少人梦寐以求的状态;而大厂的30k,往往伴随的是高压、加班、裁员风险和不确定性。
网友有人说“年轻就该拼”,也有人劝“舒服就是赚”。在我看来,钱当然重要,但长期可持续的状态更值钱。
能稳稳当当干几年,比高薪进厂三个月焦虑辞职要强多了。
别光看数字,多算算“性价比”。赚钱的方式很多,保住健康、心态平衡,也是隐形的收益。【备注:文末可领最新资料】
面试题:数组中的 k-diff 数对
数组 nums 和一个非负整数 k,要统计“k-diff 数对”的个数:找不相同下标 i、j,满足 |nums[i]-nums[j]|==k;而且同一对数值只算一次。这个“只算一次”很关键,比如 (1,3) 不管出现多少次,都记 1。k 可能为 0,这时其实是在找“有重复的数值”。
一个好用的套路
说人话版就是两步:先统计频次,再分情况。
k==0:只要某个数出现次数 ≥2,就能和自己组成一对,数这样的“值”的个数。k>0:对每个不同的数x,只要表里存在x+k,就记一对(天然不重复)。 如果你担心边界,k<0直接 0(通常题目不给负值,但防守一下也好)。
哈希表把“去重计数”和“是否存在另一半”这两件事都搞定了。k==0 时用频次避免把 [1] 误算成一对;k>0 时只看键集合,不会重复。相比排序+双指针,这个更直观,少踩坑。
from collections import Counter
from typing import List
deffindPairs(nums: List[int], k: int) -> int:
if k < 0: # 稳一手
return0
cnt = Counter(nums)
ans = 0
if k == 0:
# 找出现次数 ≥2 的“值”的个数
for x, c in cnt.items():
if c >= 2:
ans += 1
return ans
# k > 0:数 x 存在且 x+k 也存在
for x in cnt.keys():
if x + k in cnt:
ans += 1
return ans
复杂度与对比
时间 O(n),空间 O(n);排序+双指针是 O(n log n),还要小心跳过重复值,写起来更啰嗦。哈希法直接把“唯一数对”这个要求天然满足了。
常见坑
1)把 k==0 当成普通情况去做,结果把所有单个元素都算成一对,直接炸。 2)没去重导致 (1,3) 被算好几次。 3)极端数据:全相同或全不同,都建议走一遍样例验证下心里更踏实。
小测
[3,1,4,1,5], k=2→(1,3),(3,5)答案 2。[1,2,3,4,5], k=1→ 四连。[1,3,1,5,4], k=0→ 只有1出现两次,答案 1。
就这些,思路清、实现短,面试里也很耐打。你要是想换双指针版,我也能给你补一份。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领