在面对面试中的算法问题时,有一个合理的思考路径
面对算法面试,不要畏惧。
- 因为面试中的算法问题,通常并不复杂,远远不需要啃完一本《算法导论》
算法面试是什么?
不代表能够正确回答每一个问题,在面对问题时,一个合理的思考路径更重要,这也是正确完成算法面试的前提。
什么是合理的思考路径?
算法面试的目的不是正确回答每一个问题,而是展示给面试官一个你思考问题的方式,如何去解决问题的。
“正确”本身是一个相对的概念
算法面试不是高考。
可以把算法面试的过程看成是,和面试官一起探讨解决方案的过程。
对于问题的具体细节和应用环境,可以跟面试官沟通。
这个沟通本身很重要,因为这个会体现出你思考问题的方式和方法,这个更能体现价值。
举个例子
我们需要对一组数据进行排序
第一种讨论问题的维度:这组数据有什么样的特征?
- 问:有没有可能包含大量重复的数据?
- 答:如果有这种可能的话,那么三路快排是更好的选择。
- 问:是否大多数数据距离他们正确的位置很近?是否近乎有序?
- 答:如果是这样的话,那么插入排序是更好的选择。
- 问:是否数据的范围有限?比如对学生的高考成绩进行排序?
- 答:如果是这样的话,计数排序是一种更好的选择。
第二种讨论问题的维度:对排序有什么额外的要求?
- 问:是否需要稳定排序?
- 答:如果是的话,归并排序是一种更好的排序方法。
第三种讨论问题的维度:数据的存储情况是什么样的?
- 问:是否是使用链表存储的?
- 答:如果是的话,归并排序是一种更好的选择。
- 问:数据的大小是否能够完全装到内存里?
- 答:数据量很大,或者内存很小,不足以将所有的数据都装入内存里,那么需要使用外排序算法。
什么是“正确”的回答一个算法问题?
正确的回答算法问题,还应该包括:
- 对问题的独到见解
- 优化
- 代码规范
- 容错性
如果是一道非常难的算法题,那么对你的竞争对手而言,也是困难的。
回答问题的关键是,你所表现出的解决问题的思路,是否是一个优秀的思考路径。
虽然当下不能给出这个问题正确的解,但你觉得在哪个方向上努力,可以解决这个问题。
备注
上述案例,有一些排序算法和应用领域不太熟悉,下面找个时间捋一遍。