您的位置:首页 > 其它

Hulu 2013北京地区校招笔试题与人搜题整理

2013-05-05 09:07 351 查看
填空题:

1、中序遍历二叉树,结果为ABCDEFGH,后序遍历结果为ABEDCHGF,逆序遍历结果为?

2、对字符串HELL0_HULU中的字符进行二进制编码,使得字符串的编码长度尽可能短,最短长度为?

3、对长度12的有序数组进行二分查找,目标等概率出现在数组的每个位置上,则平均比较次数为?

4、一副扑克(去王),每个人随机的摸两张,则至少需要多少人摸牌,才能保证有两个人抽到同样的花色。

5、x个小球中有唯一一个球较轻,用天平秤最少称量y次能找出这个较轻的球,写出y和x的函数表达式y=f(x)

6、3的方幂及不相等的3的方幂的和排列成递增序列1,3,4,9,10,12,13……,写出数列第300项

7、无向图G有20条边,有4个度为4的顶点,6个度为3的顶点,其余顶点度小于3,则G有多少个顶点

8、桶中有M个白球,小明每分钟从桶中随机取出一个球,涂成红色(无论白或红都涂红)再放回,问小明将桶中球全部涂红的期望时间是?

9、煤矿有3000吨煤要拿到市场上卖,有一辆火车可以用来运煤,火车最多能装1000吨煤,且火车本身需要烧煤做动力,每走1公里消耗1吨煤,如何运煤才能使得运到市场的煤最多,最多是多少?

10、1,2,3,4…..n,n个数进栈,有多少种出栈顺序,写出递推公式(写出通项公式不得分)

11、宇宙飞船有100,000位的存储空间,其中有一位有故障,现有一种Agent可以用来检测故障,每个Agent可以同时测试任意个位数,若都没有故障,则返回OK,若有一位有故障,则失去响应。如果有无限多个Agent可供使用,每个Agent进行一次检测需要耗费1小时,现在有2个小时时间去找出故障位,问最少使用多少个Agent就能找出故障。

大题:

1、n个数,找出其中最小的k个数,写出代码,要求最坏情况下的时间复杂度不能高于O(nlogk)

2、写程序输出8皇后问题的所有排列,要求使用非递归的深度优先遍历。

3、有n个作业,a1,a2…..an,作业aj的处理时间为tj,产生的效益为pj,最后完成期限为dj,作业一旦被调度则不能中断,如果作业aj在dj前完成,则获得效益pj,否则无效益。给出最大化效益的作业调度算法。



人搜笔试

1. 快排每次以第一个作为主元,问时间复杂度是多少?(O(N*logN))

2. T(N) = N + T(N/2)+T(2N), 问T(N)的时间复杂度是多少?
点评:O(N*logN) or O(N)?

3. 从(0,1)中平均随机出几次才能使得和超过1?(e)

4.编程题:

一棵树的节点定义格式如下:

struct Node{

Node* parent;

Node* firstChild; // 孩子节点

Node* sibling; // 兄弟节点

}

要求非递归遍历该树。

思路:采用队列存储,来遍历节点。

5. 算法题:

有N个节点,每两个节点相邻,每个节点只与2个节点相邻,因此,N个顶点有N-1条边。每一条边上都有权值wi,定义节点i到节点i+1的边为wi。

求:不相邻的权值和最大的边的集合。

人搜面试,所投职位:搜索研发工程师:面试题回忆

1、删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。

2、求数组(元素可为正数、负数、0)的最大子序列和。

3、链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g

4、链表克隆。链表的结构为:

typedef struct list {

int data; //数据字段

list *middle; //指向链表中某任意位置元素(可指向自己)的指针

list *next;//指向链表下一元素

} list;

5、100万条数据的数据库查询速度优化问题,解决关键点是:根据主表元素特点,把主表拆分并新建副表,并且利用存储过程保证主副表的数据一致性。(不用写代码)

6、求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)。点评:这里有一参考答案:http://blog.csdn.net/wumuzi520/article/details/8046350

7、求旋转数组的最小元素(把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1)

8、找出两个单链表里交叉的第一个元素

9、字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小

10、时间复杂度为O(1),怎么找出一个栈里的最大元素

11、线程、进程区别

12、static在C和C++里各代表什么含义

13、const在C/C++里什么意思

14、常用linux命令

15、解释Select/Poll模型

******************************************************************************************************************************************************

人民搜索的笔试题

1、打印汉诺塔移动步骤,并且计算复杂度

2、计算两个字符串的是否相似(字符的种类,和出现次数相同)

3、定义二叉树,节点值为int,计算二叉树中的值在[a,b]区间的节点的个数

4、动态规划题:一条路有k可坑,每次能跳平方数步长(1 4 9 16。。),不能跳到坑里,从a跳到b最少几步?

5、给一个整数数组,求数组中重复出现次数大于数组总个数一半的数。

1、对以孩子兄弟链接的树进行遍历,不能用递归,也不能借助任何辅助空间

2、假设数组B是升序Int数组A循环移若干得到的位,实现对数组B进行查找的高效算法

3、只有整数和+-*/四种运算组成的算术表达书,实现其求值

4、还有一个是考贪心算法的,你让他们看算法导论那本书,关于fractional knapsack problem的那一段,就是0-1背包的一种变形;

5、链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g

6、求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)

1、实现一个atoi函数==>'注意正负号的判定'

2、翻转一个句子,其中单词是正序的==>两次旋转

3、二叉树两个结点中的最小公共子结点==>求长度,长度之差,远的先走,再一起走

4、三角阵中从第一行到最后一行(给出搜索方向的限制)找一个连续的最大和==>广度优先搜索√

5、实现一个STL中的vector中的尽量多的方法。

6、字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小。

[cpp]
view plaincopyprint?

/**
** author :hackbuteer
** date :2012-10-03
**/
void Arrange(char *str ,int n)

{
int i , k = n-1;

for(i = n - 1 ; i >= 0 ; --i)

{
if(str[i] != '*')

{
if(str[k] == '*')

{
str[k] = str[i];
str[i] = '*';

}
--k;
}
}
}

[cpp]
view plaincopyprint?

/**
** author :hackbuteer
** date :2012-10-03
**/
void Arrange(char *str ,
int n)
{
int i , k = n-1;

for(i = n - 1 ; i >= 0 ; --i)

{
if(str[i] != '*')

{
if(str[k] == '*')

{
str[k] = str[i];
str[i] = '*';

}
--k;
}
}
}

/**  
** author :hackbuteer
** date   :2012-10-03   
**/ 
void Arrange(char *str , int n)
{
	int i , k = n-1;
	for(i = n - 1 ; i >= 0 ; --i)
	{
		if(str[i] != '*')
		{
			if(str[k] == '*')
			{
				str[k] = str[i];
				str[i] = '*';
			}
			--k;
		}
	}
}

7、说说outer join、inner join、left join、right join的区别是什么?

内连接:进行连接的两个表对应的相匹配的字段完全相同的连接。join

外连接又分为左外连接和右外连接。

左连接即LEFT OUTER JOIN:

两个表进行左连接时会返回左边表中的所有的行和右边表中与之相匹配的列值没有相匹配的用空值代替。

右连接即RIGHT OUTER JOIN:

两个表进行右连接时会返回右边表中的所有的行和左边表中与之相匹配的列值没有相匹配的用空值代替。

我们建立两张表,students、class并插入测试数据

students

---------------------------

id name classId

1 name1 1

2 name2 null

3 name3 2

---------------------------

class

-----------------------

id name

1 class1

2 class2

3 class3

-----------------------

实验结果如下:

mysql> select s.name,c.name from students s join class c where s.classId=c.id ; (注:inner join和join一样)

+-------+-------+

| name | class |

+-------+-------+

| name1 | 1 |

| name3 | 2 |

+-------+-------+

2 rows in set

mysql> select s.name,c.name from students s left join class c on s.classId=c.id ; (left join 和 left outer join 一样)

+-------+-------+

| name | class |

+-------+-------+

| name1 | 1 |

| name2 | NULL |

| name3 | 2 |

+-------+-------+

3 rows in set

mysql> select s.name,c.name from students s right join class c on s.classId=c.id ; (right join 和 right outer join 一样)

+-------+-------+

| name | class |

+-------+-------+

| name1 | 1 |

| name3 | 2 |

| NULL | 3 |

+-------+-------+

3 rows in set
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: