Python技术迷

也是让我碰见吃人血的公司了。。

刚刷到个网友吐槽,说遇到“吃人血馒头”的公司,HR直接劝退,啥都让员工背锅:工资拖欠、岗位挂羊头卖狗肉,甚至还要员工背贷款,项目赔了自己兜底。😑

Image

我觉得这事吧,做程序员这么多年,也见过不少“离谱甲方”,但这么明着坑员工的,真的是活久见。网友评论说遇到这种公司要绕道走,我完全同意。现在互联网行业虽然“卷”,但再怎么卷也不能把坑蒙拐骗当成管理思路。

说到底,咱打工人本来就是靠技术吃饭,最怕的就是碰上耍流氓的公司。程序员不是韭菜,别把人当免费劳动力,更别想着用员工身份给公司填坑——这不是招人,是拉人垫背。

总的来说,遇到这种“公司”赶紧避雷,别把自己卖了还帮人家数钱。【备注:文末可领最新资料】

面试题:满足不等式的最大值

这个题目咋说呢,其实一看题面,不少人都以为是线性规划或者DP,其实不一定。题目大概意思就是:给你一堆数字,让你在这些数里面选一些,要求选出来的数满足某个“不等式”,然后让你求能选的最大值是多少。实际面试碰到的话,肯定要先问清楚不等式的具体形式,比如是不是像“每个数都比上一个大k”,还是“两两差值不能超过多少”,不问细节根本写不了代码。你们有时候别一上来就想写程序,沟通比敲代码还重要。

随便举个最常见的:比如有个序列nums,问你从里面挑一些数,要求后面的数比前面的大(严格递增),问最多能选几个数,顺带把最大的和是多少。这不是经典的“最长递增子序列”嘛。说实话,这个题网上解法一堆,有O(n^2)的,有O(nlogn)的,但面试时候能写出O(n^2)也够用了,别追求啥极限性能。代码大致就这么来:

defmax_increasing_subseq(nums):
    n = len(nums)
    dp = [1] * n
for i in range(n):
for j in range(i):
if nums[i] > nums[j]:
                dp[i] = max(dp[i], dp[j] + 1)
return max(dp)

这玩意其实你背着都能写,就是嵌套循环嘛,有没有发现,其实每个i都看看前面的j有没有比自己小的,有就能接着往上加。最后dp数组最大值就是能选的最多个数。要是题目让你选出来的和最大呢?那就稍微改下dp,把状态定义成以i结尾的最大和:

defmax_increasing_sum(nums):
    n = len(nums)
    dp = nums[:]
for i in range(n):
for j in range(i):
if nums[i] > nums[j]:
                dp[i] = max(dp[i], dp[j] + nums[i])
return max(dp)

就这么点小改动,瞬间就能答出来。所以说,平时刷题别太死板,多举例子,多变形。

再比如不等式换成“相邻数差值大于等于k”,那就得加个判断,写法类似,遍历前面所有数,能接上的就接。要是问和最大咋办?其实套路都差不多,核心就是用dp数组存“以当前数结尾的最大值/和/长度”,然后每次遍历前面,满足条件就更新。

你看我这么说,完全不像网上那些写得特工整的算法文,一堆分析和公式,看着头疼。实际上面试的时候,面试官要的就是你能把核心思路说清楚,然后代码别太离谱就行了。有一次我现场让同事写,结果他脑子一懵就写了个递归爆栈那种,真的搞笑。

所以说,刷算法题核心还是得练习“归纳变形能力”,就像生活里解决琐事一样,方案不唯一,灵活点。你们要是真的想写得更优雅点,还可以用bisect模块来O(nlogn)地做“最长递增子序列”,但是面试不一定非得拼这个。平时自己写写玩玩倒是可以:

import bisect
defmax_increasing_subseq2(nums):
    seq = []
for x in nums:
        idx = bisect.bisect_left(seq, x)
if idx == len(seq):
            seq.append(x)
else:
            seq[idx] = x
return len(seq)

当然这种写法一般面试官看你会就够了,写不出来也别硬怼,交流下思路也能过。

对了,我自己平时写代码最怕那种题目条件特别绕的,什么“必须选偶数个”、“不能连续选”等等,这种就要小心转移方程是不是漏掉了。建议你们写完最好手撸几个小样例,不然到现场真出错。

-END-

我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领