算法实习生面试
前记: 现在大三,想找一份暑期实习生工作。陆陆续续面了几家公司,基本定位都在算法方向。由于前期没有准备,所以基本结果都很惨。第一次去面试时,直接被面试官现教。现在实习基本确定,所以想要整理一下这段时间的面试经过,特别是针对一些被问到的面试题统一规整,希望为之后的找工作留下经验,也分享出来供大家参考。
一. 面试题目
挑选我认为比较具有代表性的题目来分享,也是重新整理,给自己加深印象。
1.【头条】给出一个计算 x \sqrt x x 的算法,并手写代码。
只要学过计算机语言的同学应该都有做过这道题。这是一道非常基础且典型的迭代算法题。基本思想是用牛顿迭代法。
至于什么是牛顿迭代法,可以参考这里
牛顿迭代法常被用来作方程的寻根,这里最重要的就是把计算开根号的运算转化为方程寻根问题。公式如下:
x 2 − a = 0 x^2-a=0 x2−a=0
现在问题就变成了:已知一个非负数a,求出方程 f ( x ) = 0 f(x)=0 f(x)=0的根,其中 f ( x ) = x 2 − a f(x)=x^2-a f(x)=x2−a。
牛顿法的迭代公式如下: x n + 1 = x n − f ′ ( x n ) f ( x n ) x_{n+1}=x_n- \frac {f'(x_n)} {f(x_n)} xn+1=xn−f(xn)f′(xn)
具体迭代步骤如下:
1) n = 0 , x 0 n=0,x_0 n=0,x0为初始值,可以选择 x 0 = 1 x_0=1 x0=1;
2)计算 f ( x n ) f(x_n) f(xn),如果 ∣ f ( x ) ∣ < ϵ |f(x)|<\epsilon ∣f(x)∣<ϵ,则停止迭代, ϵ \epsilon ϵ为给定的误差项,否则转到3);
3)计算: x n + 1 = x n − f ′ ( x n ) f ( x n ) x_{n+1}=x_n- \frac {f'(x_n)} {f(x_n)} xn+1=xn−f(xn)f′(xn),回到2)。
到此牛顿迭代法就完成了。
我面试的时候,知道要将这个问题转换,因为不熟练愣是没有想起怎么转为方程求根。当时我索性用了二分的办法来计算,不过面试官似乎觉得也还能接受。这个经验告诉我学习时一定不要眼高手低,对于这种小细节也要同等关注,细节决定成败不是没有道理的。
2.【头条】题目:有一个根据日期排列,内容为当天天气温度的列表A。请你根据该列表A,返回一个同样大小的列表B,满足列表B中每一个位置的值为A中该天之后距离其最近且比其温度高的日期,若没有则该位置为-1。例如,用索引代表日期,列表 A = [ 23 , 22 , 15 , 14 , 17 , 23 ] A=[23,22,15,14,17,23] A=[23,22,15,14,17,23],则需要返回的列表为 B = [ − 1 , 5 , 4 , 4 , 5 , − 1 ] B=[-1,5,4,4,5,-1] B=[−1,5,4,4,