谷歌2011校园招聘笔试试题解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
刚看了个题为《谷歌2011校园招聘笔试试题》的文章,转过来并试图给个解答。
纯属个人行为,与google公司无关,因此选择题答案也不一定正确,欢迎讨论。
如果有google的人看了觉得还可以给个面试机会哈~~~
1.1) D
1.2) D
1.3) C (原选D为错误答案,感谢俞寅涛(他不让我叫他大牛)订正)
1.4) 3003(B?)
注:经人告知,题目为:“书架上有19本书,编号分别1-19,选取5本,其中任意两本不相邻的的取法有多少,四个选项为A: 2002, B: 3003, C: 11628, D: 360360”。
此题解法如下:考虑第一本位置为x1,第二本为第一本后x2个位置,第三本为第二本后x3个位置。
第五本为第四本后x5个位置。
那么我们有
x1+x2+x3+x4+x5<=19, x1>=1, x2,x3,x4,x5>=2。
题目所求即此方程整数解的个数。
变换得x1+x2+x3+x4+x5+x6 = 19, x1>=1, x2,x3,x4,x5>=2, x6>=0。
令x1' = x1,x2'=x2-1, ...,x5'=x5-1, x6'=x6+1,则原方程的解数等于方程
x1'+x2'+x3'+x4'+x5'+x6'=16, x1',x2',x3',x4',x5',x6'>=1
的整数解的个数。
而我们知道后一方程解的个数为C_15^5 = 3003。
1.5) E
1.6) A
1.7) A
1.8) A (设N<M,最好情况下,N个数比M个数的最小数都小,需要N次比较,感谢俞寅涛(他不让我叫他大牛)订正)
1.9) D
1.10) C (有朋友表示应该是A,我对此表示赞同,但还是坚持原来的选择C,求正确答案)
2.1)
double eval(double x, double* A, int N) {
int r = A[N];
for(int i=n-1; i>=0; --i) {
r = r*x+A[i];
}
return r;
}
时间复杂度为O(n),需要进行n次乘法与加法。
2.2)
void calculate_result(int n, int [][] winner, int [] order, int [] result) {
if(n==1) return;
int j = n, k=0;
for(int i=0; i<n; i+=2) {
if(winner[order[i]][order[i+1]]==order[i]) {
order[k++] = order[i]; result[--j] = order[i+1];
} else {
order[k++] = order[i+1]; result[--j] = order[i];
}
}
calculate_result(n/2, winner, order, result);
}
额外的空间复杂度为O(1)。
时间复杂度的分析为T(n) = T(n/2) + \Theta(n),由Master Theory,可得T(n) = \Theta(n)。
2.3)
每组连招写为一个m+1位的字符串的形式,如ABC->D写为ABCD,那么我们有n个m+1位的字符串。
现在构造一个有向图G,每个顶点表示一个连招,从顶点a到顶点b有边iff a的后m位与b的前m位相同。
显然原问题等价于从G中找到一条最长路径。
假设G中的边数为e,首先可以用O(n+e)判断G中是
否有环,如果有,则结果为inf。
然后对于DAG G,可以用O(n+e)的时间求出其拓扑排序,设其拓扑序为order[],其中如果(order[i], order[j]) \in E(G),那么i<j。
我们可以使用如下dp算法来求出结果ans[]:
for(i=n-1; i>=0; --i) {
ans[i] = m+1;
for(j : (order[i], order[j]) \in E(G)) {
if(ans[j]+1>ans[i]) ans[i] = ans[j]+1;
}
}
这个算法时间复杂度O(n+e)。
最后的结果为max{ans[i]}。
那么我们可以看到在构造图之后,只需要O(n+e)的时间就可以求出结果。
而一个naive的构造图的算法需要时间O(n^2m)。
而使用hash table,可以得到O(nm+e)的时间复杂度。
所以总的时间复杂度为O(nm+e)。
那么显然,这个复杂度对于使用图的算法来说是最优的,因为输入规模为O(nm),而图的规模为O(n+e)。
BTW,从理论上说这个问题的最优时间复杂度是O(nm),因为输出的规模最大为O(n)。
好吧,我承认我又无聊了。