外包年薪 30万,体制内年薪10万,选哪个比较好?
刚看到个贴子,说一个程序员纠结:外包年薪30万,体制内年薪10万,选哪个?
网友还说,“穷就选工资高的,家里有点资产就选体制内”。
这话听着现实,但也太绝对了。 我觉得这事吧,关键得看你自己想要什么。外包赚得多,但真不稳定,加班、项目压榨都是常态;体制内虽然钱少点,但节奏稳、假期多、生活可预期。
说到底,这是“钱”和“安全感”的博弈。 网友说得没错,底子薄就先搞钱,活下来最重要。但如果你有点积蓄,也别光盯着眼前收入。体制内虽然慢,但能给你时间学习、积累,也能让生活没那么焦虑。
换个角度看,没绝对的好坏,只有适不适合自己。你选的路,只要能让你睡得踏实,就是最好的路。【备注:文末可领最新资料】
面试题:非递减子序列
昨晚十一点多在公司楼下吹风,脑子里还在过那个题…你们肯定见过:给一串整数,找所有“非递减子序列”,长度至少2。非递减就是后一个不比前一个小,对吧,1,2,2 这种是OK的。
不是最长、不是数量上限,是把所有非递减子序列都列出来,而且要去重,比如相同数字多次出现别重复报。输入可能有负数、有重复,别被样例骗了。
我怎么想的
就是那个…回溯嘛。用一个path装当前选的数,从左往右枚举位置 i:
如果 path为空就随便选;否则必须满足 nums[i] >= path[-1];为了防止同一层(相同起点)重复,把“本层用过的值”丢进一个小 set,这一层遇到相同值就跳过。注意是“本层”,不是全局。
代码我就贴了(Python)
from typing import List
deffindSubsequences(nums: List[int]) -> List[List[int]]:
res = []
path = []
defdfs(start: int):
if len(path) >= 2:
res.append(path[:])
used_this_level = set()
for i in range(start, len(nums)):
if nums[i] in used_this_level:
continue
ifnot path or nums[i] >= path[-1]:
used_this_level.add(nums[i])
path.append(nums[i])
dfs(i + 1)
path.pop()
dfs(0)
return res
# 小测一下
if __name__ == "__main__":
print(findSubsequences([4, 6, 7, 7]))
# 可能的输出(顺序不固定):
# [ [4,6], [4,7], [4,6,7], [6,7], [7,7], [4,7,7], [6,7,7] ]
复杂度和坑点我捞一下
时间最坏接近 O(2^n),因为子序列爆炸增长;空间是回溯栈 O(n) 加结果集。两个坑:一是去重要分层,不能全局去,不然会把合法的不同路径砍掉;二是比较条件用 >= 不是 >,因为允许相等,很多同学这儿会写错…我之前就写错过,唉。
如果要“严格递增”,把条件改成 >,去重逻辑不变;如果只要“最长长度”,那就是 LIS,用 DP 或者贪心+二分,完全是另一套了。好了我先去泡个茶,等会有人问我为啥结果顺序不一样——因为回溯遍历顺序不同嘛,重要的是集合内容对不对,别纠结哈。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领