之前我们提出了有效刷题必须要行程并熟练掌握属于自己的口语模板的概念(点击刷题的正确姿势查看详情),明确指出,不能转化为面试时清晰有条理的解题口头叙述的刷题,数量再吓人都是纸老虎。
今天的分享来自Google大神,当年offer爆仓的面霸Ascetic同学,让我们一起来膜拜学习一下他收服各路面试官的解题套路。
《Two sum 解题报告,如何在面试中答题》
Two sum这题本身相对简单,我想要通过这份解题报告来分享一下在面试中我的答题方式。
首先放一下原题:
Given an arrayof integers, return indices of the two numbers such that theyadd up to a specific target.
You may assumethat each input would have exactly one solution.
Example:
Given nums = [2, 7,11, 15], target = 9,
Because nums[0]+ nums[1] = 2 + 7 = 9,
return [0, 1].
相信拿到这题的第一时间,很多同学脑子里马上就能反应出这题的最优解答方式。但如果是在面试中,其实并不适合马上提出这种解法,因为相对于最优的答案,面试官其实更在意你全面的思考过程。没有思考过程直接提出最优解,反而会有死记硬背答案的嫌疑,并不能体现你的个人能力(我个人因此收到过dream company的拒信,此处都是泪,演技不够真的不行啊)。
同时,大部分面试官都是在工作之余偶尔来面试玩票的,你一上来提出的解法如果太过罕见或高深难懂,一棒子打懵了面试官对你其实也是没有任何好处的。
如果我在面试中碰到这题的话,我会这样回答:
1、首先询问清楚题目的详细细节,和面试官确认是否只有exactly one solution,确认每个数字的大小范围,确保大方向不会跑偏。
2简略的提出最直接的解法,也就是枚举第一个数和第二个数并check它们的sumO(N^2)的解法。在提出这种解法之后马上表明这个解法在时间复杂度上有极大缺陷,需要改进
3、提出先排序的解法:将整个数组排序,然后一个start变量指向对首,一个end变量指向队尾,比较(start+end)target:如果相等则代表找到答案,如果小于target, start往后移,如果大于targetend往前移。重复这个过程直到找到答案为止。并向面试官表示这个解法的时间复杂度是O(NlogN),比前面的那种解法有所提高。面试官可能会问及这种方法的空间复杂度,这时需要对各种O(NlogN)的排序算法的空间复杂度有所了解。 一般面试官会让你白板实现这种解法。
4、提出使用hashMap的解法,比较这种解法与上一种解法。相比上一种解法,这种解法的时间复杂度相对较低,但要消耗掉大量的空间。面试官可能会问一些hashMap相关的问题。
这样三种解法循序渐进的提出,更能体现出你的思维过程,解决问题的能力,并且涉及到的知识点比较多,比如排序和hashmap。抓住机会和面试官就涉及到的知识点多进行交流,体现你知识的全面性和深度。
总而言之,拿到题目,就算你一开始就知道最优解法,也不妨先提出比较basic的解法,分析这个basic解法的缺点并在此基础上进行优化,从而提出最优解法。这其实更接近软件工程师的工作日常:大部分的工作任务都不需要杀鸡用牛刀追求最高级的解法,更重要的是代码的稳定性和可读性,以及与他人良好的沟通合作,让同事们也能理解并跟上你的思路。
我们是一群15年刚刚从血泪码农求职之路杀出,现任职于FLAG的软件工程师。欢迎关注北美码农求职WiKi公众号,获取求职咨询和内推信息。
继续阅读
阅读原文