特别讨厌自己的上司,几乎快抑郁了,但是月收入有4万多,到底该不该辞职?
刚看到个贴子,说有人月薪四万多,但实在受不了上司,快抑郁了,纠结要不要辞职。
我觉得这事吧,关键在于权衡。网友有人说“四万够治愈一切委屈”,也有人劝“健康比钱重要”。但换个角度想,高薪意味着公司认可你的价值,这在职场并不容易;可如果身心长期受折磨,钱再多也可能透支未来。
从我的角度看,先别急着拍板辞职,可以给自己设个缓冲期:一边观察能否通过沟通、转岗或培养替代心态来缓解矛盾;一边暗中做准备,提升能力,拓展人脉,留好后路。就像网友说的,“职场本质是性价比”,如果觉得付出的情绪成本远远高于收入,那才是辞职的最好时机。
别被一时情绪裹挟,也别忽视健康。钱很重要,但人的状态更重要,留得青山在,哪怕以后换山头,也照样能赚钱。【备注:文末可领最新资料】
面试题:连续子数组的和
昨晚十一点多,我在公司楼下吹风,手机差点掉进井盖…想起刚帮小李看一个“连续子数组的和”的题,顺手跟你们聊聊,别紧张,别玄学,就是把一段连续的数加起来,看看要么能不能凑到某个值,要么求个最大的和,对吧。
先说最常见那个,求“最大的连续和”。思路别绕:你从左往右扫,手里拿一个当前段的和,发现它一旦变成了负的,就别犟了,负数只会拖后腿,立刻清零从下一个元素重新开始,这个套路有个名字叫卡丹(Kadane)算法。为啥行?因为负前缀对后面的任何选择都不可能更好,所以丢掉就对了。我那会儿一边等外卖一边敲了个最短的版本,你看就懂。
defmax_subarray(nums):
cur = 0# 当前段和
ans = float('-inf')
for x in nums:
cur = max(x, cur + x) # 要么续,要么重开
ans = max(ans, cur)
return ans
有同学会问,那如果题目不是要最大值,而是问“有多少个连续子数组的和等于 k”?这个就不能用上面那个贪心了,需要换个脑子:前缀和 + 统计。前缀和是啥,就是到当前位置的总和。假设两段前缀 pre[j] 和 pre[i],如果 pre[j] - pre[i] == k,那中间 (i, j] 这段就是答案之一。于是我只要在往前走的时候,查一下“有没有出现过 pre - k 这个前缀”,有几次就能凑出几段。为了秒查,用哈希表(字典)记次数,初始要放个 0:1,表示空前缀。
from collections import defaultdict
defsubarray_sum_equals_k(nums, k):
cnt = defaultdict(int)
cnt[0] = 1# 空前缀
pre = 0
ans = 0
for x in nums:
pre += x
ans += cnt[pre - k]
cnt[pre] += 1
return ans
你看这两个函数,一个求“最爽的一段”,一个数“正好凑 k 的段数”,经常被混着考。上周面试里我还被追问“全是负数行不行”,答案是行,max_subarray 里我们把 ans 设成负无穷,就是为了照顾全负场景;而等于 k 那个,cnt[0]=1 也能覆盖“从开头刚好到某位置等于 k”的情况,细节别丢。
顺便提两点小坑吧。第一,数据长的时候,pre 可能很大,但 Python int 不会溢出,这点省心;第二,想找“最短/最长一段和等于 k”,那就不能只数次数了,需要在字典里存位置,最短就尽量让左右靠近,最长就尽量两端拉开,这个改造不难,你们按需加。
我刚接了个电话…说哪儿了,对,复杂度别忘了背:两个算法都是 O(n) 时间,空间上最大和是 O(1),等于 k 是 O(n) 因为要记前缀出现次数。够用了,跑起来很快。我先去把外卖拿了,回来再吐槽小李那奇怪的测试用例算了。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领