Python技术迷

知乎高问:小红书高管为何不管HR卡年龄这件事?

刚看到个贴子,说网友吐槽“小红书高管怎么不管HR卡年龄这事”。意思是有公司公开嫌求职者“年龄大”,但高层装没看见。

Image

我觉得这事吧,说到底不是HR的问题,而是企业文化的问题。HR只是执行者,真正定规则的人,是老板和高管。如果他们默认“年轻=便宜=好管理”,那HR再讲公平也没用。

但话说回来,卡年龄的现象在互联网圈几乎是公开的秘密。35岁危机早就成了行业潜规则。关键不是指望哪个平台整顿,而是整个行业得重新认识“经验”的价值。

总的来说,别拿“年轻化”当借口,成熟员工的稳定与经验,才是公司最值钱的资产。【备注:文末可领最新资料】

面试题:最大递增三元组

昨晚十一点多,在公司楼下吹了会儿风,小李问我:哥,那个…“最大递增三元组”咋写才又稳又快?我一想,这题别硬刚,讲清楚就行——给你一个数组,找 i<j<k 且 nums[i]<nums[j]<nums[k] 的三元组,让三者和最大。不是数量最多,是和最大,别搞混了。

中间定锚,两边配对

直觉上,选中间那个 nums[j] 当锚,就看左边有没有比它小的里“最大的那个”,右边有没有比它大的里“最大的那个”。两边都有,就能凑一个候选和:L + nums[j] + R。遍历所有 j,取最大和就完事儿。

问题是怎么快: 左边“最大且小于 nums[j]”要用有序结构;右边“右侧最大值”其实用后缀最大数组就行,判断它是否大于 nums[j]。

  • 左边:维护一份“到当前为止出现过的元素”的有序列表,用 bisect 找到 < nums[j] 的最大元素,O(log n)。
  • 右边:预处理 suffix_max[i] = 从 i 到末尾的最大值,O(1) 取用;若 suffix_max[j+1] > nums[j],它就是右侧可用的“最大且大于”。

整体 O(n log n),空间 O(n)。稳。

from bisect import bisect_left, insort

defmax_increasing_triplet_sum(nums):
    n = len(nums)
if n < 3:
returnNone# 不存在

# 右侧最大值预处理
    suffix_max = [float('-inf')] * (n + 1)
for i in range(n - 1, -1, -1):
        suffix_max[i] = max(nums[i], suffix_max[i + 1])

    best_sum = float('-inf')
    best_triplet = None# (L, M, R)
    seen_sorted = []     # 左侧已见元素的有序列表

for j in range(1, n - 1):
# 左边找 < nums[j] 的最大值
        pos = bisect_left(seen_sorted, nums[j])
        left_ok = seen_sorted[pos - 1] if pos > 0elseNone

# 右边取最大的,但要保证 > nums[j]
        right_max = suffix_max[j + 1]
        right_ok = right_max if right_max > nums[j] elseNone

if left_ok isnotNoneand right_ok isnotNone:
            s = left_ok + nums[j] + right_ok
if s > best_sum:
                best_sum = s
                best_triplet = (left_ok, nums[j], right_ok)

# 别忘了把当前元素放进左侧集合里
        insort(seen_sorted, nums[j])

return (best_sum, best_triplet) if best_triplet elseNone

# 小测一下
if __name__ == "__main__":
    arr = [2, 5, 3, 1, 4, 9]
    print(max_increasing_triplet_sum(arr))  # 期望类似 (2+5+9=16) 或 (3+4+9=16)

我提醒两句就走:一是严格递增,所以左边用 bisect_left 找到的是“第一个 >= M 的位置”,往前一个才是 < M 的最大;二是右边直接用后缀最大能过,因为我们就是要“比 M 大且越大越好”,后缀最大若不大于 M,说明右侧无解,省心。

要是你还想要下标,那就额外存个“值→最近下标”的哈希,在更新 best 的时候顺手记一下。行了我去泡咖啡了,谁要是把“数量最多的 LIS 长度=3”写成这题…咳,别说了,走了走了。

-END-

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

🔥虎哥私藏精品🔥

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