鹅厂员工看某个从pdd跳槽过来的员工抢他的A+绩效不顺眼,反手向pdd举报,导致人家竞业被发现,赔偿100+w
刚刷到一个新闻,说前PDD员工跳槽,结果因为抢了同事的绩效,被对方反手举报,竞业被翻出来,最后赔了100多万。
作为程序员看这事,第一反应是:信息安全和代码审查一个逻辑——你以为埋得很深的 bug,往往被最熟悉的人一眼看穿。职场同理,真正能“卡你”的,往往不是对手,而是身边的同事。网友有人骂举报的人心眼小,但换个角度想,这里面有利益冲突,有人就可能动手。
我的看法是:跳槽时别只盯着薪资,合同里的竞业限制要像看源代码里的“隐性依赖”一样仔细,不然一旦触发就是灾难性的异常。还有,团队关系再复杂,也要保持最基本的职业边界,别给别人留下抓手。【备注:文末可领最新资料】
面试题:区间列表的交集
昨晚十一点多,我在小区门口等奶茶,手机一震,小李问我:“哥,两个排期表有重叠那块儿咋算?”我脑子里一过,就是那个…区间列表的交集。别急,咱用最顺手的双指针就够了。
有两组不重叠且已按起点升序的闭区间,比如 [ [1,3],[5,7],[9,12] ] 跟 [ [2,4],[6,8],[10,10] ]。想要把它们“重叠的部分”全挑出来。闭区间的意思是端点算在内,等会儿会用到这个点,别漏。
两根指针 i、j,从两边的列表开走。每次拿当前两个区间 a=[a1,a2]、b=[b1,b2],它们的交集起点是 max(a1,b1),终点是 min(a2,b2)。要是起点不大于终点,就有交集。然后谁先结束(右端点更小),谁的指针往前挪一步。为啥?因为那个区间已经“用完右边了”,再也跟对方后面的重不了。
from typing import List
definterval_intersection(A: List[List[int]], B: List[List[int]]) -> List[List[int]]:
i, j, ans = 0, 0, []
while i < len(A) and j < len(B):
a1, a2 = A[i]
b1, b2 = B[j]
left = max(a1, b1)
right = min(a2, b2)
if left <= right: # 闭区间,等于也算交
ans.append([left, right])
if a2 < b2: # 谁先“结束”谁走
i += 1
else:
j += 1
return ans
那天风大我有点迷糊,小李还问:“端点相等算不算?”闭区间就算,比如 [3,5] 和 [5,9] 交成 [5,5]。要是题目说开区间 ( ] 之类的,判断条件就得从 <= 换成 <,端点处理也要改,不然你会平白多出一堆“零长度”的交集。还有,输入里区间必须各自不重叠且有序;如果没排好,得先排序并先把各自列表合并一下再交(不然结果会乱套)。
整套流程只扫一遍两个列表,时间 O(m+n),空间 O(1)(不算结果)。扩展下也不麻烦:想统计交集总长度,就把 right-left 累起来;想过滤掉长度为 0 的,就改成 left < right 再收。还有人问“能不能把多份日程一把梭?”多路的话可以先两两求交,迭代就行,或者把所有区间按起点扫一遍,用计数看有没有达到“同时在线的来源数”。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领