发薪日发现多了7万块,以为财务发错了,第二天上班才知道,这是公司的利润奖,平均每人3W~5W不等。
刚看到个贴子,说有人发薪日查银行卡,发现多了7万块,以为是财务算错了,结果第二天才知道是公司发的利润奖,平均每人都有3~5万。
作为程序员,我第一反应是:这老板太良心了!一般情况下,我们常见的“奖金”不是年底画饼,就是绩效考核各种扣扣减减,最后到手比预期少一半。而这家公司是直接把利润拿出来分,说明它真的把员工当伙伴而不是工具人。
网友里有人调侃“财务手滑就算了吧”,我倒觉得这背后体现的是一种健康的企业文化——赚钱大家一起分,这样团队才更有动力。尤其在我们这种加班多、需求反复改的行业,一个突如其来的大红包,不光能缓解生活压力,更能让人觉得自己的付出被看见了。
说到底,钱是最实在的认可,比口号、比“画饼”都更让人心里踏实。【备注:文末可领最新资料】
面试题:蜗牛排序
昨天晚上十一点多,在公司楼下风挺大,我一手咖啡一手手机,小李问我:哥,那个…“蜗牛排序”怎么整啊?我当时脑子里嗡的一下——不是难,就是容易想偏。你们知道吧,蜗牛不直线爬,它绕着圈往里拱,二维数组就被它一层一层剥开,像吃烤冷面那种一卷一卷的,哦对是数组的API,不是吃的…
别上来就想着写很多判断,先把画面感建立。假设一张表格,四条边:上边、右边、下边、左边。蜗牛顺时针兜一圈,把最外层拿走,然后边界往里收一格,再兜下一圈。循环直到上下边界交叉或者左右边界交叉,嗯…就是那种“没有肉可剔了”的感觉。注意下,矩阵可能是m×n,不一定正方形,走法一样,但拐弯时要小心别重复拿元素,特别是只有一行或一列的时候,容易踩坑。
我就把当时发给小李的那段贴出来,别嫌啰嗦,变量名我取得直白点,免得半夜看眼花:
defsnail(matrix):
# 空的也得顾上
ifnot matrix ornot matrix[0]:
return []
top, bottom = 0, len(matrix) - 1
left, right = 0, len(matrix[0]) - 1
out = []
while top <= bottom and left <= right:
# 从左到右
for c in range(left, right + 1):
out.append(matrix[top][c])
top += 1
# 从上到下
for r in range(top, bottom + 1):
out.append(matrix[r][right])
right -= 1
# 下面这两段要在边界检查后,再走,避免重复
if top <= bottom:
# 从右到左
for c in range(right, left - 1, -1):
out.append(matrix[bottom][c])
bottom -= 1
if left <= right:
# 从下到上
for r in range(bottom, top - 1, -1):
out.append(matrix[r][left])
left += 1
return out
# 小试一下
if __name__ == "__main__":
m = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]
print(snail(m)) # [1,2,3,4,8,12,11,10,9,5,6,7]
有人问我那个复杂度怎么算,我困得眼睛直打架也能背出来:每个元素进队一次,出队零次,时间O(mn),空间如果不算输出就是O(1)。坑嘛,三个:一是空矩阵或空行,别越界;二是只有一行或一列时,后两段循环要靠if top <= bottom和if left <= right兜底;三是数据不是长方形就麻烦了,理论上应该保证每行等长,否则下标会炸,这时候要么前置规整,要么改成按“方向向量+已访问标记”的方案。
对了,有同学喜欢逆时针,思路一模一样,把四段遍历的顺序掉个个儿就行;还有人要按层输出,不拼成一维,那就把每圈当一组收集起来;要把它变成生成器也不难,把append换成yield,惰性遍历嘛,流式处理挺香。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领