最近经历的一些笔试面试题(谷歌 百度 网易有道)

longzuo 2010-09-30 01:37:08
加精
谷歌笔试:
1.
n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j的队伍中更强的一支 所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中,
比如order[n] = {4,3,5,8,1......},那么第一轮比赛就是 4对3, 5对8。。。。。。
胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排,
下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4对5,直至出现第一名
编程实现,给出二维数组w,一维数组order 和 用于输出比赛名次的数组result[n],求出result


2.题目说的比较花哨,根据我的理解,本质上就是有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误

百度面试:

3.
用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平 最多可以从y个小球中找出较轻的那个,求y与x的关系式
4.有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得m个记录
5.大量的URL字符串,如何从中去除重复的,优化时间空间复杂度

网易有道笔试:
6. 求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是 这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度
7.求一个有向连通图的割点,割点的定义是,如果除去此节点和与其相关的边,有向图不再连通,描述算法

...全文
26928 391 打赏 收藏 转发到动态 举报
写回复
用AI写文章
391 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerryjerryone 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

引用 5 楼 hblac 的回复:

2. 把每个字符串看成一个图的顶点,两个字符串匹配就连一条有向边。相当于判断一个有向图是否有环以及求它的直径


两个字符串连接后的新字符串是m+2,这个是不是也要考虑一下
[/Quote]

这个可行
jerryjerryone 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 的回复:]

1.堆排序

2.有向图+dfs

3.还没考虑这个题,呵呵

4.将输入按顺序分组,每组m个。并且对第i组中的每一个元素,以 1/i 的概率决定是否替换原有的m中的某一个,如果决定替换再随机从原有的m个元素抽选一个进行替换。直到结束。

5.hash

6.ls已有正确解法

7.
[/Quote]

第四个对吗?第i组以1/i的概率,第一组以1的概率,第二组以1/2的概率?这明显不随机吧
jerryjerryone 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 119 楼 的回复:]

第六题:
算法:分别求根节点到左右孩子的最大路径,然后相加。代码如下
10 int Max(struct Node *p)
11 {
12 int tmp1 = 0,tmp2 = 0;
13 if(NULL == p)
14 return 0;
15 tmp1 = 1 + Max(p->……
[/Quote]

此解法是不对的,比如:

a
b c
d e
f g h i
j k l
最长路径是 jfdbeil
而不是jfdbac
qingyouzijuyi 2011-10-11
  • 打赏
  • 举报
回复
看看,学习。
liyaqin88 2011-08-30
  • 打赏
  • 举报
回复
哥们很牛啊[Quote=引用 4 楼 air_snake 的回复:]

1,是heap的实现,bottom up build heap,复杂度O(n)。前两天刚看到heap也叫loser tree,应该就是这个原因。
3. x = ceiling(log3y),这个精华里有的
5.精华也有
[/Quote]
kannju 2011-06-21
  • 打赏
  • 举报
回复
恩不错
z16hn 2010-11-30
  • 打赏
  • 举报
回复
题好,正要这些来看看
希望把答案也拿出来看看
Oo纳兰筱DoO 2010-11-30
  • 打赏
  • 举报
回复
第一题:
#include<stdio.h>
void main()
{
int order[8]={3,4,5,8,1,7,6,2};
int result[8];
int w[8][8];
int i,j,t;
printf("输出实力矩阵:\n");
for(i=1;i<=8;i++)
for(j=1;j<=8;j++)
scanf("%d",&w[i][j]);
i=0;j=1;t=8; //t用来分配名次,由于被淘汰的没有次序,依次递减即可。
while(1)
{
if(w[order[i]][order[j]]==order[i])
{
result[j]=t;
order[j]=-1; //j已经分配名次
if(t==2){result[i]=1;break;}
}
else {
result[i]=t;
order[i]=-1; //i已经分配名次
if(t==2){result[j]=1;break;}
}

i=(i+1)%8;
while(order[i]==-1||i==j)
i=(i+1)%8;
j=(j+1)%8;
while(order[j]==-1||i==j)
j=(j+1)%8;
t--;
}
printf("输出名次:");
for(i=0;i<8;i++)
printf("%d",result[i]);
printf("\n");
}
yealoo 2010-11-29
  • 打赏
  • 举报
回复
Mark一下,一天一道题,长此以往、必能有翻身之日!
yjsyjs1189 2010-11-19
  • 打赏
  • 举报
回复
这些大公司什么的最讨厌了,面试的时候总是考数组。。。
pengyi_1989 2010-11-18
  • 打赏
  • 举报
回复
学习了啊.............
color09 2010-11-16
  • 打赏
  • 举报
回复
先收藏了,慢慢看,嘿嘿
熊哥club 2010-11-16
  • 打赏
  • 举报
回复
很好 很强大
gulujun702 2010-11-16
  • 打赏
  • 举报
回复
什么乱七八糟的题 真烦人
zhuzlv 2010-11-16
  • 打赏
  • 举报
回复
马克下,闲时细看
youzelin 2010-11-16
  • 打赏
  • 举报
回复
kankan
lizzywu 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 yui 的回复:]

楼上我对第6题的回复显得有点走火入魔了,参考过别人的算法解释,事实上不需要考虑得那么复杂。使用以下C代码就可以解决了。

C/C++ code

/*
* return the depth of the tree
*/
int get_depth(Tree *tree) {
int depth = 0;
if ( tree ) {
int a = get……
[/Quote]


这个算法不错~~~
shanpobaiyang 2010-11-06
  • 打赏
  • 举报
回复
第三题和鸡蛋是一样的,只不过将其推广了,10个鸡蛋有一个轻了或者重了,只能比较三次将有问题的蛋找出来。明显y=3x是不对的
power721 2010-10-27
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
Hi-Tomorrow 2010-10-26
  • 打赏
  • 举报
回复
1.堆排序

2.有向图+dfs

3.还没考虑这个题,呵呵

4.将输入按顺序分组,每组m个。并且对第i组中的每一个元素,以 1/i 的概率决定是否替换原有的m中的某一个,如果决定替换再随机从原有的m个元素抽选一个进行替换。直到结束。
加载更多回复(262)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧