20140925百度校园招聘二面

一面请看这里20140925百度校园招聘一面

  二面基本就是在考算法和数学了!总共四到题目:

一   写程序实现十进制转n进制,返回值类型自己定义。我就实现 了一个 string result(int m, int n)//m表示十进制数,n表示进制数。现场写的代码不完整,回来再完善了下:

#include
#include
#include
using namespace std;
string transform(int n, int m)
{
	stack s;
	bool negative;
	if(n < 0)
	{
		negative = true;
		n = 0 - n;
	}
	else negative = false;
	while(n != 0)
	{
		char tmp;
		int mod = n % m;
		if(mod > 9)
			tmp = 'A' + mod - 10;
		else tmp = '0' + mod;
		s.push(tmp);
		n /= m;
	}
	int index = 0;
	int len = s.size();
	if(negative)
		++len;//为负数,加负号
	string result('1', len);
	if(negative)
		result[index++] = '-';
	while(!s.empty())
	{
		result[index++] = s.top();
		s.pop();
	}
	return result.substr(0, len);
}


二  一个数组由a,b,c,d,e五个字符组成,设计一种算法找出一个包含这五种字符的最小区间,数组是循环的,也就是可以有这样的区间(9,2)

    因为要包含五个字符,所以最小区间长度是5。所以我最开始想到的就是让区别数从5开始往上递增,对于每一个区间数比如5,遍历数组的所有区间,判断是否包含5个字符,是的话就刚好找到了最小区间。然后这复杂度算了一下是O(n^3)了,接着在面试官的指导下我优化到了O(n^2)。他说其实最优的可以O(n),不过能优化到O(n^2)已经不错了。

三  概率题

有四种颜料,给下面8个方格填色,每相邻两个不能用同一种颜色,有多少种填色方法?

  20140925百度校园招聘二面_第1张图片

想了一下,挺简单的,就是4 * 3^7。然后他加了条件,首尾也不能用同种颜色。他这样加条件后我想了很久,中间也说了我的逻辑,我觉得没挺严谨的,但就是错误。最后没能想出正确答案。



四  也是一道在网上看到过的题目,但就是之前没去看答案,也没思考过。

百度hi有个日志文件存了用户的上线时间和下线时间,格式为  userid      hh:mm::ss(上线)   hh:mm:ss(下线),一行一条数据。问,如何统计一天内每一秒在线的用户数量。数据量100w。

我最终是想出了复杂度 大概在100w*40左右的算法,他好像也比较满意,但说最优可以到100W加一个常数。

你可能感兴趣的:(面经,百度,面经)