TMD!离职后还被前公司调查去向。。
离职后还要被前公司调查去向?这年头,连分手都没这么“关心”前任吧?
最近看到一个帖子,说有个程序员离职后,被前公司问东问西,调查去了哪里工作。
网友们的反应很统一:“没有竞业协议、没有补偿,公司凭啥管?”
这让我想起了某些“前任公司”,平时对员工爱答不理,离职后又舍不得放手,恨不得装个GPS追踪你。难道是怕员工出去之后,发现外面的天更蓝、工资更高,忍不住跟前同事分享“自由的空气”?
程序员跳槽,本来就是市场规律。前公司该做的是反思,为什么人走了,而不是去调查人去哪了。毕竟,留得住人才的公司,根本不需要在意员工离职后的去向。
各位程序员朋友,你们遇到过这种“前公司跟踪狂”吗?评论区聊聊,看看谁的前公司最离谱【备注:文末可领最新资料】。
算法题:分配重复整数
有一天,我刷到了一道有意思的算法题,大致意思是这样的:
给定一个整数数组,其中一些数字是重复的,我们需要将这些重复的数字重新分配到数组的空位中(假设数组中有足够的空位来存放所有的数字),确保最终数组中所有的元素都唯一。
乍一看,这题不难,但仔细一想,好像有点东西。简单粗暴的方法当然是用一个 set 记录出现过的数字,然后遍历数组,遇到重复的就找个空位塞进去。但这方法看起来没啥技术含量,而且可能会导致性能问题。
所以,我们得优化一下思路,让它又快又优雅。🐍
解法分析
既然是要去重,我们就得解决两个核心问题:
如何快速找到重复的元素? 如何有效地分配这些重复的元素到空位?
我们可以用一个 set 记录已经出现的数字,同时用一个 queue 记录所有的空位索引。然后遍历数组,遇到重复的元素,就把它换到 queue 里的空位,同时确保新填充的数字是唯一的。
代码实现
def allocate_unique_numbers(arr):
seen = set() # 记录已出现的数字
empty_slots = [] # 存放数组中的空位索引
duplicates = [] # 记录所有重复的数字 # 第一次遍历:找出所有的重复数字和空位
for i in range(len(arr)):
if arr[i] == -1: # -1 代表空位
empty_slots.append(i)
elif arr[i] in seen:
duplicates.append(i)
else:
seen.add(arr[i])
# 第二次遍历:给重复数字重新分配位置
num = 1 # 从 1 开始找唯一的数字
for i in duplicates:
while num in seen: # 找一个没出现过的数字
num += 1
arr[i] = num # 替换重复数字
seen.add(num) # 记住这个数字
num += 1 # 下一个数字
return arr
# 示例测试
arr = [4, 3, -1, 3, 5, -1, 4, -1]
print(allocate_unique_numbers(arr))
代码解析
这段代码巧妙地利用了 set 和 queue,用 set 记录已出现的数字,用 queue 记录空位。这样,我们遍历数组时可以快速判断某个数是否重复,并且能高效地找到替换它的新数。
时间复杂度:O(n) 主要是遍历数组的成本,两次遍历搞定。 空间复杂度:O(n),主要是 seen、empty_slots和duplicates占用的空间。
这样做的好处
不用频繁查找空位:直接存储 empty_slots,分配更高效。保证新填入的数字唯一:每次找到一个新的 num,确保它不在seen里。避免暴力搜索:没有用 while在数组里反复查找,时间复杂度稳定。
结语
这道题说难不难,说简单也不简单。刚开始我以为是 set 和 list 组合暴力解,后来发现可以优化,就整了个 queue 来搞定。写完代码后感觉:人活着,能写出一段时间复杂度 O(n) 的去重代码,这才是程序员的浪漫。
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。