上海国企的月薪,大家觉得如何?到手15k,年终8万,双边公积金6k
刚刷到这个帖子,我第一反应是:这还问“如何”?多少人看完得沉默半天。
上海国企,到手15k,年终8万,双边公积金6k,这配置放出来,评论区肯定两拨人。一拨说“也就那样,上海消费高”,另一拨已经开始翻自己工资条了。
关键是这玩意儿不是只看月薪。到手15k已经不低了,年终再来8万,公积金还这么厚,等于你眼前的钱、年底的钱、以后买房的钱,全都给你垫了一层。很多打工人嘴上嫌弃国企涨薪慢,真看到这种待遇,手里的简历估计都想自己投过去。
当然,国企也有国企的烦,流程多、节奏慢、事儿磨人。但这份收入摆在上海,真别装看不上。至少比一堆996画饼公司强太多了。HR看完都得小声问一句:还招人吗?
反转字符串,别一上来就 [::-1]
这题我见过不少人写崩。
输入是这样的:
s = ["h", "e", "l", "l", "o"]
要求反转后变成:
["o", "l", "l", "e", "h"]
看着简单,很多人第一反应就是:
s = s[::-1]
这行代码当然能把字符串切片反过来,但放在这道题里,我第一眼就不太信。因为题目一般会要求原地修改,也就是不能重新搞一个列表再赋值。
这个坑很小,但面试里很容易被抓。
你写 s = s[::-1],只是让局部变量 s 指向了一个新列表。外面的原列表其实没被你真正改掉。
可以简单测一下:
defreverse_wrong(s):
s = s[::-1]
data = ["a", "b", "c"]
reverse_wrong(data)
print(data)
输出还是:
['a', 'b', 'c']
这地方就别跟面试官解释 Python 变量引用了,代码已经说明问题。
这题我一般就用双指针,不绕。
defreverse_string(chars):
left = 0
right = len(chars) - 1
while left < right:
chars[left], chars[right] = chars[right], chars[left]
left += 1
right -= 1
跑一下:
s = ["h", "e", "l", "l", "o"]
reverse_string(s)
print(s)
结果:
['o', 'l', 'l', 'e', 'h']
这个写法没什么花活,就是从两边往中间换。
第一次交换 h 和 o,第二次交换 e 和 l,中间那个 l 不用管。指针相遇或者错过,循环就停。
时间复杂度是 O(n),因为每个字符最多被访问一次。
空间复杂度是 O(1),因为没有新建跟输入规模相关的数组。
这题真正要注意的不是“会不会反转”,而是你有没有看清楚题目里的“原地”。
如果题目给的是字符串:
text = "hello"
那就不一样了。Python 里的字符串不能原地改,必须转成列表,或者直接返回新字符串:
defreverse_text(text):
chars = list(text)
left, right = 0, len(chars) - 1
while left < right:
chars[left], chars[right] = chars[right], chars[left]
left += 1
right -= 1
return"".join(chars)
测试:
print(reverse_text("hello"))
输出:
olleh
所以这题别背答案。
看到输入是 list[str],优先想原地交换。
看到输入是 str,先想清楚字符串不可变,别硬改。
这类简单题,错的地方往往不是算法,而是边界和题意。