社区
C++ 语言
帖子详情
又见tencent面试题
i_noname
2005-11-05 08:32:06
有两个集合
集合A{1,7,19,21,55,100。。。}
集合B{7,22,100。。。}
两个集合都是10万个数据(已排序),要求写一个算法,判断B是不是A的子集,算法时间复杂度为Q(N)
...全文
1369
39
打赏
收藏
又见tencent面试题
有两个集合 集合A{1,7,19,21,55,100。。。} 集合B{7,22,100。。。} 两个集合都是10万个数据(已排序),要求写一个算法,判断B是不是A的子集,算法时间复杂度为Q(N)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
39 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
justrun2005
2005-11-08
打赏
举报
回复
从最大的元素开始比较,效果估计会好点。但说回来,这个题弄个o(n)复杂度的一点不难。
不过我想面试的时候,不能仅仅满足题目要求吧?
实践出真知,努力便成功
我的博客:http://blog.csdn.net/justrun2005
zl0126
2005-11-07
打赏
举报
回复
mark
skfox
2005-11-07
打赏
举报
回复
up
sinall
2005-11-07
打赏
举报
回复
呵呵,原来如彼啊。
“两个集合都是10万个数据(已排序)”
insistent_guy
2005-11-07
打赏
举报
回复
#include <iostream>
void main(){
int a[]={1,3,6,8,9,10};
int b[]={3,8,10,11};
int i=0;
int j=0;
//printf("%d",sizeof b);
while(i<sizeof b/sizeof b[0]){
printf("[%d-%d]\n",i,b[i]);
while(j<(sizeof a/sizeof a[0]) && a[j]<b[i]){
j++;
};
printf("%d\n",j);
if(a[j]>b[i]){
printf("b is not a's subset");
break;
} else if (j== sizeof a/sizeof a[0]){
printf("b is not a's subset either");
break;
}
j++;
i++;
}
if(i==sizeof b/sizeof b[0]){
printf("b is a's subset");
}
}
finix
2005-11-07
打赏
举报
回复
最差情况下的复杂度不就是O(N)嘛。遍历一遍就可以了呀,两根指针就解决了
Baku
2005-11-07
打赏
举报
回复
1 有序的集合想不出O(N)的办法只能说明基础太差
2 无序的集合想出O(N)的算法只能说明算法是错的
--------
哈哈,果然经典
楼下的写出O(log N)的算法:)
youzelin
2005-11-07
打赏
举报
回复
好玩,有趣,顶一下先
cg5353
2005-11-07
打赏
举报
回复
和KMP有点类似
batistuta8848
2005-11-07
打赏
举报
回复
学习ing
wuhandong125
2005-11-07
打赏
举报
回复
用折半查找应该可以吧~~
j805
2005-11-07
打赏
举报
回复
一看就知道不是,A中没有22.
^_^,捣个乱.
yjgx007
2005-11-07
打赏
举报
回复
我想应该是一个概率问题
kofkyo
2005-11-06
打赏
举报
回复
szws(克米帅) 的程序似乎不大对~i++应该放在条件外面吧,不然是不是a[i]<b[j]的时候下个循环i的值就是i+2了吧
luoknd
2005-11-06
打赏
举报
回复
1 有序的集合想不出O(N)的办法只能说明基础太差
2 无序的集合想出O(N)的算法只能说明算法是错的
经典
2004csharp
2005-11-06
打赏
举报
回复
szws(克米帅) 支持
yingle2000
2005-11-06
打赏
举报
回复
A和B都已经是完成排序的了,这样只要都遍历一遍就可以了,复杂度为O(N)
szws
2005-11-06
打赏
举报
回复
int i=0;j=0;
for(i=0;i<n;i++)
{
if(a[i]== b[j])
{
i++;j++
}
if(a[i]<b[j])
{
i++;
}
if(a[i]>b[j])
break;
}
szws
2005-11-06
打赏
举报
回复
int i=0;j=0;
for(i=0;i<n;i++)
{
if(a[i]== b[j])
{
i++;j++
}
if(a[i]<b[j])
{
i++;
}
if(a[i]>b[j])
break;
}
lzp729
2005-11-06
打赏
举报
回复
自己先该一下,加点效率
bool detemin (int * const &a, const long &sa, int * const &b, const long &sb)
{
if (!sb) // 高中学的,空集是任何集合的子集
return true;
for (int i = 0; i < sb; ++i)
{
static long pos = 0; // 存储当前遍历到的A的索引值
for (; (*(b+i)) != (*(a+pos)); ++pos)
{
// 如果A的当索引值比B的当前索引值小,或者A剩下的元素比B剩下的少 ...
if ( *(a+pos) < *(b+i) ) || ( (sa - pos) < (sb - i) )
return false;
}
}
return true;
}
加载更多回复(19)
Google, Baidu,
Tencent
面试题
总结
Google,Baidu,腾讯近期
面试题
总结,侧重于海量数据的处理方法,面试利器,实用有效!
tencent
.zip_
tencent
_试题_面试
腾讯面试试题,38页,希望对求职人士游泳
2019最新BAT python
面试题
2019最新BAT python
面试题
2021最新BAT大厂
面试题
合集.zip
秋招马上就要到了,想要进大厂的可以看看这份
面试题
BTAJ大厂
面试题
汇总
有迷茫没方向、找工作、咨询面试突击班、简历已读不回、跳槽涨薪、提升学习、进大厂等问题的程序员朋友
C++ 语言
65,189
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章