20140925百度校园招聘二面

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

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

[cpp] view plaincopy
#include<iostream>  
#include<string>  
#include<stack>  
using namespace std;  
string transform(int n, int m)  
{  
    stack<char> 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个方格填色,每相邻两个不能用同一种颜色,有多少种填色方法?

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


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

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

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

你可能感兴趣的:(百度,校园招聘)