这是上海爱奇艺算法工程师的三面,一共三个问题。
一道算法题:
现有1-200之间的正整数,假设从中任意抽取101个数,试证明其中必然有一个数可以被另外一个数整除?
提示:
1-200之间的数可以用 (2^a)*b 来表示,其中,b>=1, a>=0, 并且a是取能取到的最大值。比如: 6 = (2^1)*3, 5 = (2^0)*5.
解题思路:
关键是要发现其中的规律,这里面着重要注意b的取值,可以发现b的取值全部是奇数,所以到这里就可以理解了,所以偶数都可以表示成一个奇数乘以2的a次方,200以内的奇数是100个,而取101个数的话,所有奇数都是可以覆盖到的,那101个的话,必然有一个数是可以整除另一个数。
一道C++问题:
c++四种cast,哪四种,再说说它们的细节?
const_cast(expression)
dynamic_cast(expression)
reinterpret_cast(expression)
static_cast(expression)
细节可以看C++ primer和Effective C++。
最后项目问题:
比较K-means, KNN, EM 和SVM。