一、认识算法面试
首先算法面试不是高考,应该把这个过程看作和面试官一起探讨一个问题的解决方案。对于问题的细节和用场景,可以与面试官沟通。
举例:对于一组数据进行排序,很多人立马想到的是用快排算法,但真的是这样吗?
其实不是的,我们应该先看看这组数据有什么样的特征,可以询问面试官:
(1)有没有可能包含大量重复的元素?使用三路快排
(2)是否大部分数据距离它正确的位置很近?是否近乎有序?插入排序
(3)是否数据的取值比较有限?例如学生成绩,人员年龄?计数排序
(4)是否需要稳定排序?归并算法
(5)数据的存储情况是怎样的?数据的大小是否可以装载在内存里?数据量比较大,或者说内存不足以装载,需要使用外排序
二、什么是“正确”的回答一个算法问题?
正确还包括对问题的独到见解:优化,代码规范,容错性。回答不出来也没关系,关键在于表达出解决问题的思路。
三、认识数据规模
以下做个参考,如果想在1s内解决问题:
- O(n^2)的算法可以处理10^4级别的数据;
- O(n)的算法可以处理10^8级别的数据;
- O(nlogn)的算法可以处理10^7级别的数据;