小编亲身经历,面试35W的AI互联网大厂,现场手撕一道经典的算法题!

点击上方“菜鸟学Python”,选择“星标”公众号

重磅干货,第一时间送达

今年的就业形式虽然非常的严峻,但是仍旧有着不少的机会,小编本身是做深度学习的算法的,虽然本身的水平可能比较差,但是也有幸得到了一个AI互联网大厂的面试资格,薪资待遇什么的还是很好的。

但是要求也是很高的,面试当天就是高强度的4个小时面试。这其中当然是少不了手撕代码,小编今天就带着最新鲜的面试题,跟大家一起分享。

01.题目引入-基础版

手撕代码是第二个面试官在面试最后提出的。开始的基础题目就是常见的爬楼梯问题。

题目:小明要上楼,他一次只能上一个台阶或者两个台阶,问他上N阶台阶有多少种方法呢。

面对这个问题,想必有过《剑指offer》或者力扣刷题经验的伙伴们,肯定暗自窃喜,这问题不就是简单的动态规划问题或者利用递归方式进行解决嘛!确实,这道题,可以按照以下的思路进行解决。

入下图所示:

  • 当N=1,也就是只需要爬一个台阶时,那么只有1种方法;

  • 当N=2时,此时就有两种方法,要不就是每次上一个台阶,也就是1、1,要不就是直接上两个台阶;

  • 那如果N=3时,此时,小明只可能从第1个台阶直接走两步到第三个台阶,或者从第二个台阶,直接走一步上来;

  • 对于N=4的情况,同样,小明只能从第三个台阶走一步或者是从第二个台阶走两步上来;

  • 然后对于N,就是从第N-1个台阶走一步或者是从N-2个台阶走两步上来。

我们总结成公式的表达方式就是f(N) = f(N-1) + f(N-2)。而前面我们求出f(1) = 1,f(2) = 2。这是不是就很简单了,我们直观上就直接可以利用递归来求取了。例如:

f(5) = f(4) + f(3),而f(4) = f(3) + f(2) ,而f(3) = f(2) +f(1) = 3。于是可以求出f(5) = 8。也就是说小明跳到第5个台阶一共有8种方法。如果小伙伴不信的话,可以自己去跳以下试试。当然,这里小编也给出了8种不同的方法:

1、1、1、1、1

1、1、1、2

1、1、2、1

1、2、1、1

2、1、1、1

1、2、2

2、1、2

2、2、1

至于程序,那也是很简单的,小编直接给出动态规划的方法程序,因为当N很大时,递归会造成很多的计算浪费,同时时间消耗也比较大。

02.进阶版-花费最少的力气爬楼梯

可能时面试官觉得我做的太轻松了,于是他就进一步问了一个问题,如何花费最少的力气来爬楼梯。

题目描述是这样的。基础问题不变,小明还是每次只能上一步或者是两步,但是现在的问题是每上一个楼梯都会消耗一定的能量,称之为cost,例如cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] ,如下图所示:

小明分别走1、3、5、7、8、10号台阶,总的能量损失为6。用最小的能量登上了所有的台阶,那我们又如何分析这道题呢,下面小编带大家一步一步仔细分析。

03.手撕面试题

首先,我们用dp数组来保存经过每个台阶的最小能量的损耗。例如,dp[0]表示上0个台阶能量损耗为0,那么dp[1] = 1,而dp[2]为100;

然后,小明每次只能上一个或者两个台阶,如果一个一个上台阶的话,那么dp[2]=1+100=101 > 100。所以就一次上两个就是100;

接着分析,那么dp[3]为多少呢,我们知道,第三个台阶可以从第1个台阶上两步走到3,也可以从第二个台阶上一个台阶来到第三个台阶;

最后,dp[3] = min(dp[1], dp[2]) + cost[2]。我们递推可以知道dp[N] = min(dp[N-1], dp[N-2]) + cost[N-1]。有了这个状态转移公式,我们便可以编写程序了。

上述程序中,我们对cost的长度进行判断,如果小于1,那么就返回0,如果小于3,那么就返回cost[-1]。否则的话就按照我们上面的状态转移公式进行计算即可。返回最后两个台阶数值的最小值即可。结果也证明了我们的结果正确性。

以上就是小编在面试的时候,遇到的真实的面试 题目。不得不说,对于基础的coding能力还是非常考验的,大家需要在平时多多的刷题,多多积累,才能够从容的分析问题,并得到最终的结果。

如果你觉得本文有帮助,欢迎留言区给个三连!

推荐阅读:

点这里,获取新手福利
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值