免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3377 | 回复: 8
打印 上一主题 下一主题

[算法] 腾讯最新面试题,算法高手请进 [复制链接]

hll 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-04 19:46 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2006-08-04 19:55 |只看该作者
1.对两个集合排序之后再求交.
2.没看懂题目....
hll 该用户已被删除
3 [报告]
发表于 2006-08-04 20:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
hll 该用户已被删除
4 [报告]
发表于 2006-08-04 20:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
hll 该用户已被删除
5 [报告]
发表于 2006-08-04 20:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2006-08-04 20:26 |只看该作者

回复 5楼 hll 的帖子

两个都排序,分别要LOG(N)吧,然后一边扫描就可以求出交集了,是O(N),所以时间复杂度是O(N).
hll 该用户已被删除
7 [报告]
发表于 2006-08-04 20:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2006-08-04 20:37 |只看该作者

回复 1楼 hll 的帖子

第一题的方法,这不是一个好办法,无非是一个解决办法而已
std::list<int> unite(const std::list<int>& A, const std::list<int>& B)
{
std::map<int, bool> temp;
for(std::list<int>::const_iterator iter = A.begin(); iter != A.end(); iter ++){
if(temp.find(*iter) == temp.end()) temp[*iter] = true;
}
for(std::list<int>::const_iterator iter = B.begin(); iter != B.end(); iter ++){
if(temp.find(*iter) == temp.end()) temp[*iter] = true;
}
std::list<int> ret;
for(std::map<int, bool>::const_iterator iter = temp.begin(); iter != temp.end(); iter++){
ret.push_back(iter->first);
}
return ret;
}

论坛徽章:
0
9 [报告]
发表于 2006-08-04 20:56 |只看该作者
第二题的方法
int delta[86400]; //定义每秒钟人数的变化数
memset(delta, 0, sizeof(delta)); //初始化
//打开文件
while(!feof(....)){
    int online_tm, int offline_tm; //
    //读入上线时间和下限时间
    delta[online_tm]++;
    delta[offline_tm]--;
}
int result[86400];
int begin_total; //0:00的在线数,需要初始化
int totla = begin_total;
for(int i = 0; i < 86400; i++){
    result[i] = total;
    total += delta[i];
}

//到这儿result 就是你要的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP