离职一年多,今天突然弹出一个失职处分,还要扣我将近4000块钱,联系前主管发现已被单删~
刚看到个贴子,说有人离职一年多,交接无误也确认完,结果突然收到前公司发来的“失职处分”,还要扣3741块,联系前主管直接被删好友。
这bug也拖得太久了吧,一年后才触发异常?职场这种“延迟炸弹”其实不稀奇,很多公司人事和财务系统数据没清干净,或者故意留个口子,到需要时就补刀。 网友有人建议去劳动仲裁,我觉得这事必须硬刚,不然就等于给他们写了个“可以反复调用的扣款接口”。
技术圈讲究可追溯性,任何惩罚必须有明确日志记录,且在合理时限内通知。 从价值角度讲,你离职那一刻合同关系就结束了,后续的处罚调用无效接口——直接拒绝返回。总之,遇到这种事,保存证据、走正规流程,别让公司把你当软柿子捏。【备注:文末可领最新资料】
面试题:摆动排序
前几天晚上加班到快 11 点,在公司茶水间喝咖啡的时候,我们组的小李突然跑过来跟我说,他的算法题卡了半天——摆动排序(wiggle sort)——说是面试的时候被问懵了,回来想想还是没整明白。我当时一听,嗯,这题我以前踩过坑,就顺手给他讲了半个小时。
先聊聊它到底要干嘛
摆动排序的要求,其实特别像小时候排队拍照时老师说的“高矮高矮站好”: 数组排出来,要满足 nums[0] <= nums[1] >= nums[2] <= nums[3] ... 这样的交替关系。 有时候题目会要求相反方向,比如 >= <= >= <=,但本质一样,就是数字高低交错,看起来更“摆动”。
比如:
输入: [3, 5, 2, 1, 6, 4]
可能的输出: [3, 5, 1, 6, 2, 4]
你会发现它是“低高低高低高”这么个节奏。
为啥有人会写乱
最常见的误区,是有人直接先 sort 一下,然后试图交换相邻元素来完成摆动。这个方法在大多数情况下能过,但有坑——特别是遇到重复数字时,有些相邻位置的大小关系会冲突。 我当时第一次写就是直接 sort + swap,结果某个测试用例全是相同数字,我的摆动就彻底没“摆”起来。
一个简单粗暴但有效的办法
我给小李说,你先别想太复杂,可以直接一次遍历解决:
从 i = 1开始,一路扫到末尾。对于奇数位,确保 nums[i] >= nums[i-1],如果不成立就交换。对于偶数位,确保 nums[i] <= nums[i-1],不成立也交换。
这样每走一步,都能保证前面那一段已经是摆动的状态了。
Python 代码示例
defwiggle_sort(nums):
for i in range(1, len(nums)):
if (i % 2 == 1and nums[i] < nums[i - 1]) or (i % 2 == 0and nums[i] > nums[i - 1]):
nums[i], nums[i - 1] = nums[i - 1], nums[i]
return nums
# 测试一下
arr = [3, 5, 2, 1, 6, 4]
print(wiggle_sort(arr)) # 输出可能是 [3, 5, 1, 6, 2, 4]
这个方法的好处是 O(n) 就能搞定,而且原地交换,不用额外空间。 坏处嘛,就是它保证的是“局部摆动”,不是唯一解,但面试官一般不会卡这个。
如果想要摆得更“对称”
还有一种 Wiggle Sort II(进阶版),要求中位数左右两边数字分别填充高低,避免重复数字卡位置,这就得先找中位数,然后用三向切分法(Dutch National Flag),把大于中位数的放在奇数位,小于中位数的放偶数位,相等的分到中间——这个思路写起来就稍微绕一点了,面试时间不够可能写不完。
我当时跟小李说,如果面试官问到进阶版,可以先把简单版写出来,再跟他说思路,很多时候能加分。
摆动排序这种题,其实是个“细节活”,逻辑没复杂到哪里,但容易因为条件判断写错一个符号而翻车。建议刷到这种题,不要死记代码,多画几次数组变化过程,就不容易被面试时的紧张打乱节奏了。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领