程序员面试,为什么要考察算法和智力题?

DS 梦见 2018-08-30

小灰一直很喜欢算法。

不是因为小灰附庸风雅,而是算法本身千变万化,魅力无穷。

在面试的时候,面试官也常常考察候选人的算法能力,甚至有的面试官还需要出各种各样有趣的智力题。这是为什么呢?

因为候选人对技术知识的掌握固然重要,但是对于程序员来说,缜密的逻辑思维、灵活解决问题的能力更加难能可贵。

这些能力从解决算法问题,回答智力题目的过程中,可以充分地展现出来。

下面我们来举几个例子,看看大家能不能快速回答出这些问题:


老崔去某厂笔试时,遇到了经典的「狼、羊、白菜 过河问题」,由于经常看算法方面的内容,这道对于他来说,so easy。

题目大概是这样:

题号1:

农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。

请考虑一种方法,让农夫能够安全地安排这些东西和他自己过河。

老崔回家,自信满满的和女友说这道题时,女友反问到:“为啥程序员面试要考脑筋急转弯呀!?”

老崔这时认真起来,用理科生的严肃态度反驳女友:“这不是什么脑筋急转弯,这是道算法题,脑筋急转弯都是小聪明的歪理,别搞错了好不好~

如果你不是程序员,又坚持说上道题是脑筋急转弯,那你再来看看这道题:

题号2:

请你把10根放在篮子里的香蕉分给10只猴子,每只猴要得到一根,最后篮子里还要留下一根香蕉,你能做到吗?

不好意思地说,这道题是小学二年级的一道数学竞赛题,给你一些时间,思索一下,这道题是不是更有脑洞大开的味道。

作为程序员,去大厂笔试时都会遇到算法题,有些是正经的题,有些则看上去就是用来坑你的。

题目3:

你让一个工人为你工作七天,用一根金条作为报酬。金条被分成7小块,可以每天支付一块。

但是,如果你只能将金条切割两次,那么你如何切割金条,能满足每天支付一块给工人呢?

这题很简单,并不需要什么算法,其实是在考量你的数学思维。如果你把精力只用在处理金条上,并不考虑实际场景,那你就把自己坑了。

坦率地讲,上面那些题都像是来搞笑的。下面认真给出一些算法题:

题目4:

你有不限量的水,还有两个水桶,容积分别是5升和3升。如何精确地称量出4升水?

如果你有答案,那么看看这道题的升级版:

题目5:

现在有三个容积分别是3升、5升和8升的水桶,其中容积为8升的水桶中装满了水,容积为3升和容积为5升的水桶是空的。

三个水桶都没有体积刻度,现在需要将大水桶中的8升水等分成两份,每份都是4升水,(附加条件是只能使用另外两个空水桶)

这道题不止一个方案,一共有多少种方案,桶与桶之间倒水的次数哪种方案最少?这就是一个算法题了。

类似这种水桶倒水的问题,确实是各个大厂笔试的常见题目,也是筛除小白程序员和算法工程师的关键题。

这道题答对了,月薪要40K,答不对就要4K。

如果用人类的思维方式,那么解决这个问题的关键是怎么通过倒水凑出确定的1升水或能容纳1升水的空间,三只水桶的容积分别是3、5和8,用这三个数做加减运算,可以得到很多组答案。

但是计算机并不能理解这个「1」的重要性,很难按照人类的思维方式按部就班地推导答案,因此用计算机解决这个问题,通常会选择使用「穷举法」。为什么使用「穷举法」呢?

因为这不是一个典型意义上的求解最优解的问题,虽然可能暗含了求解倒水次数最少的方法的要求,但就本质而言,常用的求解最优解问题的高效方法都不适用于此问题。

如果能够穷举解空间的全部合法解,然后通过比较找到最优解也是一种求解最优解的方法。

求解这个问题的算法本质上就是对状态的穷举搜索。这样状态变化搜索的结果通常是得到一棵状态搜索树,根节点是初始状态,叶子节点可能是最终状态,也可能是某个无法转换到最终状态的中间状态。

这里并不细说了,如果你想弄清楚详细的算法解决过程【在这里查找】。

靠算法题筛选人才

下面梳理了算法面试时筛选人才时类似的关键题目,有些简单的,有复杂的。

大家不妨先收藏下来,抽空解答一下,秀一秀自己智商,再看看要不要找老板谈个加薪或者其他福利。

题目6:

现在有两种砖,分别是1*1的砖和1*2的砖,用这两种砖铺 1*N 的地面。

问共有多少种铺法?(输入为N,请输出相应的铺法数,经典铺砖问题)


题目7:

12个高矮不同的人,排成两排,每排必须是从矮到高排列,且第二排比第一排对应的人高。

求排列方式有多少种? 


题目8:

从一副扑克中随机抽取5张牌,判断是不是顺子(5张牌数字连续,大小王为任意数字)。


题目9:

输入两个整数 n 和 m,从数列 1,2,3…n 中随机取几个数,使其和等于m,要求将其中所有的可能组合列出来。 


题目10:

输入一个正整数 n,输出所有和为 n 的连续正整数序列。

最后再摆一道,烧脑题

传说中的爱因斯坦提出的思考题,他宣称世界上只有2%的人能解出这个题目,你肯定听说过不下一次这道题,但也肯定你始终连题目都没记清楚过。

题目如下:

据说有五个不同颜色的房间排成一排,每个房间里分别住着一个不同国籍的人,每个人都喝一种特定品牌的饮料,抽一种特定品牌的烟,养一种宠物,没有任意两个人抽相同品牌的香烟,或喝相同品牌的饮料,或养相同的宠物。

问题是谁在养鱼作为宠物?为了寻找答案,爱因斯坦给出了以下15条线索。

1. 英国人住在红色的房子里;

2. 瑞典人养狗作为宠物;

3. 丹麦人喝茶;

4. 绿房子紧挨着白房子,在白房子的左边;

5. 绿房子的主人喝咖啡;

6. 抽 Pall Mall 牌香烟的人养鸟;

7. 黄色房子里的人抽 Dunhill 牌香烟;

8. 住在中间那个房子里的人喝牛奶;

9. 挪威人住在第一个房子里面;

10. 抽 Blends 牌香烟的人和养猫的人相邻;

11. 养马的人和抽 Dunhill 牌香烟的人相邻;

12. 抽 BlueMaster 牌香烟的人喝啤酒;

13. 德国人抽 Prince 牌香烟;

14. 挪威人和住在蓝房子的人相邻;

15. 抽 Blends 牌香烟的人和喝矿泉水的人相邻。

留言活动:

不要百度:靠自己能力,留下你的答案

一般人很难记住这么多线索,即使之前看过这道题,蒙对了答案,但让你写一下算法思路,照样傻眼。 

如果你是真 · 算法工程师,那就不是一般人儿了,请再次秀出你的智商。

由于此题求解过程复杂,详细解答过程请【点击这里】

应试教育出来的我们,在上学学习期间缺少方法和指导。工作这些年也可能很少接触要自己动手写算法的任务。

但算法,一直都是体现程序员能力的基本要素,也是拉开收入差距的关键指标。


想学算法?


缺方法?

7大方面,从基础到应用,趣味精讲算法;

缺时间?

43天,1天1个算法知识,每天15分钟;

缺练习?

35个经典算法相关案例分析;


原价:69.00

限时特价:49.00

>> 算法应该怎么玩?<<




参考来源:

封面图:动漫《银魂》

算法经典书 | 算法的乐趣

算法经典书 | 图解算法

算法经典书 | 算法之美

分享决定技术高度

学习拉开技术差距

 >>GitChat<< 



    本站仅按申请收录文章,版权归原作者所有
    如若侵权,请联系本站删除
    觉得不错,分享给更多人看到
    梦见 热门文章:

    漫画:编程其实是文科    阅读/点赞 : 1108/17

    我是一个线程    阅读/点赞 : 693/22

    漫画:三分钟了解敏捷开发    阅读/点赞 : 644/17

    漫画:什么是中间人攻击    阅读/点赞 : 613/16

    我是一个Java class    阅读/点赞 : 552/10

    网贷遇雷潮,投资者如何避雷?    阅读/点赞 : 0/0