摆脱编程面试困境的技巧
在编码面试中遇到困难是很困难的。
如果你不是在面试,你可能会休息一下,或者向谷歌寻求帮助。但时间紧迫,你又没有谷歌。
你面前只有一块空白板、一支散发着臭味的马克笔,还有一位满怀期待地看着你的面试官。而你满脑子想的只有自己陷入了困境。
在这些时刻,你需要一条生命线——就像一个写着“紧急情况下,打破玻璃”的小盒子。
那个玻璃盒子里?这里有一份解脱的技巧清单。这就是那份技巧清单。
当你不知如何开始的时候
1) 在白板上写下一个示例输入,并“手写”将其转换为正确的输出。注意你所使用的流程。寻找其中的规律,并思考如何在代码中实现你的流程。
想反转一个字符串?在黑板上写下“hello”。“手工”反转它——从每个字符的当前位置到其目标位置画箭头。
注意这个模式:看起来我们正在交换字符对,从外部开始然后向内移动。现在我们已经完成了算法的一半。
2) 解决问题的一个更简单的版本。删除或简化问题的其中一个要求。找到解决方案后,看看是否可以将该方法应用于原始问题。
想找出一个集合中的第 k 个最大元素?那就先找出最大的元素,然后是第二大的,再是第三大的。以此为基础,找到第 k 个最大元素也并不难。
3) 从一个低效的解决方案开始。即使感觉效率低得离谱,从一个能返回正确答案的解决方案开始通常也会很有帮助。从那里开始,你只需要优化你的解决方案。解释一下这只是你的初步想法,你怀疑有更快的解决方案。
假设你收到两组已排序的数字列表,并要求你求出两组数字的中位数。这看起来有点复杂,但你可以简单地这样做:
- 将数组连接在一起形成一个新数组。
- 对新数组进行排序。
- 返回中间索引处的值。
请注意,你也可以使用技巧 (2) 来得到这个算法:解决这个问题的一个更简单的版本。“如何找到一个已排序数字列表的中位数?只需获取中间索引处的项目即可。现在,我可以采用这种方法来获取两个已排序列表的中位数吗?”
当你苦苦寻找优化方法时
1)查找重复工作。如果你当前的解决方案需要多次处理相同的数据,那么你就是在做不必要的重复工作。看看是否可以通过只查看一次数据来节省时间。
假设在你的一个循环中,有一个强制操作来查找数组中的元素。你反复查找一些不必要的元素。你可以将数组转换为查找表,以显著缩短运行时间。
2) 在问题的具体细节中寻找线索。输入数组是否排序?二叉树是否平衡?诸如此类的细节可以为解决方案提供重要的线索。如果这些不重要,面试官就不会提起它。这是一个强有力的信号,表明问题的最佳解决方案利用了这一点。
假设你被要求在一个已排序的数组中找到某个数字第一次出现的位置。数组已排序这一事实是一个强有力的提示——你可以利用这一事实,使用二分查找法。
有时面试官会故意把问题弄得含糊不清,因为他们希望你通过提问来挖掘这些重要的背景信息。所以,在问题一开始就问一些问题吧。
3) 提出一些数据结构来解决这个问题。你能通过使用哈希表的快速查找来节省时间吗?你能用图来表达数据点之间的关系吗?看看问题的要求,问问自己是否有一个数据结构具备这些属性。
4)设定空间和运行时间的界限。大声思考问题的参数。试着估算一下你的算法可能达到的速度:
- “我至少要查看所有物品,所以我不能做得比时间更好”。
- “蛮力法就是测试所有可能性,也就是时间。所以问题在于我能否打败那个时间。”
- “答案将包含 n^2 个项目,所以我至少必须花费那么多时间。”
当其他一切都失败时
1)明确你的现状。阐述你所了解的内容、你正在尝试实现的目标,并强调两者之间的差距。你越清楚地表达你的困境,面试官就越容易帮助你。
2)注意面试官的回答。如果她针对你刚才说的某件事提问,那其中可能隐藏着一些线索。不要担心思路中断——放下手头的事情,深入思考她的问题。
放松。你应该被卡住了。
面试官会特意选择难题。他们想看看你如何解决那些你一时还不知道如何解决的问题。
认真的说。如果你没有卡住,只是轻松解决了问题,面试官的评价可能只会是“没看懂候选人解决问题的过程——也许她之前已经见过这个面试题了?”
另一方面,如果你确实遇到困难,可以使用这些技巧之一来摆脱困境,并在整个过程中与面试官进行清晰的沟通……这样你就会得到这样的评价:“解决问题的能力很强。录用。”
获取免费的编码面试速成课程
别让你的面试碰运气。我会教你巧妙算法背后的基本规律,让你在应对棘手的编程面试问题时也能想出巧妙的算法。
文章来源:https://dev.to/interviewcake/tricks-for-getting-unstuck-during-a-coding-interview-2602