麻了,随手投简历到情趣玩具了。。
刚刷到有网友说,自己无意投了家情趣玩具公司,搞得压力很大,说自己“古板、封建”,还没法接受这种行业。
我觉得这事吧,站在程序员的角度,真的挺能共情。一开始做开发也挑行业,总觉得某些领域不够“高大上”,但说到底,技术就是技术,饭碗归饭碗。工作本质上就是价值交换,哪个行业不都是用代码换钱?而且,情趣行业也不是洪水猛兽,互联网大厂里奇葩业务线多了去了,关键还是看自己能不能做得下去、扛得住。
网友们的回复我也看了,大部分挺能理解,说压力大很正常。也有劝TA放宽心的,觉得“只要别违法,都是正经活儿”。我觉得说得对,时代变了,咱程序员本来就是工具人,别给自己设那么多条条框框。
职业没高低,心态最重要。【备注:文末可领最新资料】
算法题:球队传球成功的优势得分
哎,讲真,前两天我还在公司楼下便利店等小哥配咖啡的时候,隔壁桌有一帮踢球的同事在那讨论什么“球队传球成功的优势得分”那个算法题,笑死我了。他们平时组队打球特别卷,结果写代码就一堆人头疼。
那我大概说说这个思路啊,就是不整那些浮夸词,咱们用点生活点的例子。你想象一下,就是晚上快下班那会儿,我们组一群人,饿得不行,互相传外卖菜单,谁接住菜单谁能点餐。传菜单就像球员传球,每传一次算一步,但不是每个人都能随便接,只有和你是朋友(假设是相邻关系)才可以。
这个题其实本质上就是一个队列或者DFS遍历。题目大概是给你一个球员数,和一个传球关系链,比如说每次只能传给下一个或者上一个,问你传N次球后,能回到原始球员手里的有几种方案。
传球问题的核心思路
我那天边啃三明治边听小李讲,他说一开始他就想暴力递归,然后跑出来一堆栈溢出,电脑都卡了。其实,这题递归+记忆化就行,就是每传一步球,有两种选择——往左传或者往右传,每次都把剩下的步数-1,直到步数用完,看球到没到目标那个人手里。
代码我用Java随手写了一版,你们要用也别全抄,改点变量就行。反正面试官一般喜欢你现场写,不喜欢粘贴。
publicclassPassBall{
publicintnumWays(int n, int k){
// dp[i][j]表示传j步,到第i个人的方案数
int[][] dp = newint[n][k+1];
dp[0][0] = 1; // 初始球在0号手里,走0步
for (int step = 1; step <= k; step++) {
for (int i = 0; i < n; i++) {
dp[i][step] = 0;
if (i - 1 >= 0)
dp[i][step] += dp[i - 1][step - 1];
if (i + 1 < n)
dp[i][step] += dp[i + 1][step - 1];
}
}
return dp[0][k];
}
}
那天群里小张还问为啥要用二维数组,我说你用一维的也行,就是每次把上一步结果保存下来呗,但是写着写着容易晕,反正空间够就直接开二维,省事。
这里面有个地方我记得我被坑过一次,就是如果只有两个人的话,那球就只能你来我往地传,其实结果不一定像你想的那么多。还有步数如果是奇数还是偶数,其实差别挺大的。大家写代码时候最好先纸上画几个例子,比如三个人传两步,结果是怎么分布的,这样写代码的时候思路才不会乱。
面试官喜欢你边写边讲,比如你可以说:“其实这个问题就是个典型的动态规划,每步只跟前后有关,所以可以状态转移……”这样显得你思路很清楚,其实代码都很基础。
这题你们要真遇到不会也别慌,就直接按这个套路来,代码记忆化或者DP都能过。
-END-
我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html