Python技术迷

从大厂辞职,上岸事业编的6个月,我emo了。收入砍了一半,生活的扣扣嗖嗖。。

刚看到个贴子,说有网友从大厂辞职,上岸事业编六个月后开始emo:收入砍半,日子过得精打细算,原来“上岸”也不是想象中的天堂。

Image

网友们说“铁饭碗稳定”,但没人告诉你那口饭往往不热。大厂节奏快、压力大,可至少有成就感和回报;体制内稳定没错,却也意味着节奏慢、机会少、收入固定。人就是这样,站在城外想进去,进去又怀念外面的自由。

说到底,哪有完美的选择。赚钱的活儿累,轻松的岗位穷;自由的代价是焦虑,稳定的代价是停滞。关键还是得清楚自己要什么,别盲目跟风。

想开点,选了哪条路,就别老想着另一条。【备注:文末可领最新资料】

面试题:数组中的 k-diff 数对

昨天晚上十一点多我在公司楼下等外卖,手机一震,小李问我“东哥,那个 k-diff 数对是个啥鬼?”我一听就来劲儿——这题其实不难,但细节能绊人。咱就用最接地气的方式聊一遍,顺手把 Python 代码也敲上。

题目

给你一个整数数组 nums,还有一个非负整数 k。我们要数“k-diff 数对”的个数:也就是挑两个不重复的下标 i != j,让 |nums[i] - nums[j]| == k,而且同一对数值只算一次。重点有两点: 1)k 可能是 0; 2)同一对数值(比如 1 和 3)无论出现多少次,只记一回。

两个思路

说人话版本,思路 A 用哈希计数,思路 B 用集合查找,代码都很短。

思路 A:计数表

  • 先把每个数出现次数统计出来。
  • 如果 k == 0:只要某个数出现次数 ≥ 2,它就能和自己组成一对(比如两个 5,差是 0),数这样的数有多少个。
  • 如果 k > 0:对每个数 x,只要表里存在 x + k,就记一对(只算一次)。
  • k < 0 直接返回 0(题意里一般给非负,但稳一点)。

思路 B:去重集合 + 查另一半

  • 把数组去重成集合 S。
  • k == 0 情况需要频次,还是得回到思路 A。
  • k > 0:统计 x in S 且 x + k in S 的数量即可。 这个方法直观、也不重复计数。

我日常写题更偏向“计数表法”,k==0 与 k>0 一把梭。

from collections import Counter
from typing import List

deffindPairs(nums: List[int], k: int) -> int:
# 边界:k < 0 没意义
if k < 0:
return0

    freq = Counter(nums)
    ans = 0

if k == 0:
# 需要同值至少两个
for x, c in freq.items():
if c >= 2:
                ans += 1
return ans

# k > 0:只要存在 x 和 x+k
for x in freq.keys():
if x + k in freq:
            ans += 1
return ans

# 小测一下
if __name__ == "__main__":
    print(findPairs([3,1,4,1,5], 2))   # 2 -> (1,3),(3,5)
    print(findPairs([1,2,3,4,5], 1))   # 4 -> (1,2),(2,3),(3,4),(4,5)
    print(findPairs([1,3,1,5,4], 0))   # 1 -> (1,1)
    print(findPairs([1,1,1,2,2], 1))   # 1 -> (1,2) 只算一次

有三处容易栽:

  • k 为 0 的时候,不能用集合硬算差值,必须看“是否有重复”。否则 [1,1] 会被你误杀。
  • 去重:k>0 时一定是“数值对”不重复,(1,3) 多次出现也只算 1;计数表/集合天然避免重复。
  • 负 k:有些平台保证非负,但写函数时建议直接 k<0 返回 0,增强鲁棒性,省得面试官抠细节。

复杂度和为啥这么写

时间复杂度基本是 O(n),建表一遍,扫描一遍;空间是 O(n) 存计数。你要是用排序 + 双指针也能做,排序是 O(n log n),而且处理去重更绕——我一般不折腾,哈希表够快、够稳。

我们组小李做埋点去重的时候,就遇到“找相隔固定差值的成对事件”,直接把时间戳丢进上面这套,k 就是阈值,数一数有多少“有效成对”。写完一跑,嗯,老板说“挺稳”。

行了不多说,我先去把泡面捞了,有问题你直接把样例甩给我,我给你看哪儿不对。

-END-

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

🔥虎哥私藏精品🔥

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