首页 新闻 会员 周边 捐助

两个数组A和B,都已经升序排列. 用什么方式获得A和B重复的值?

0
悬赏园豆:20 [已解决问题] 解决于 2015-12-30 09:33

int[] A = { 1, 3, 5, 7, 9, 24, 88, 108, 126, 139 };
int[] B = { 2, 5, 24, 88, 108, 110, 112, 126 };

//得出A B 数组的重复值,不用.net库提供的方法,也不使用嵌套for循环的方式

应该怎么做? 想不到好的办法.

请各位尽量以代码示例,不胜感激

coder_wang的主页 coder_wang | 初学一级 | 园豆:193
提问于:2014-03-28 09:03
< >
分享
最佳答案
1

保存A、B的当前元素的索引值indexA和indexB,都初始化为0

比较A、B的当前元素

如果相等,则是重复的,indexA和indexB都加1

如果A[indexA]<B[indexB],那么indexA加1

如果A[indexA]>B[indexB],那么indexB加1

最后A或B的索引值超出范围时结束

按照上面的流程,只需要遍历一次

收获园豆:10
诶碧司 | 小虾三级 |园豆:1912 | 2014-03-28 10:46

正解

coder_wang | 园豆:193 (初学一级) | 2014-03-28 14:22

这个解法最优

jiu~ | 园豆:444 (菜鸟二级) | 2015-05-09 22:26
其他回答(10)
0

有啥 规律不,只好 for嵌套吧

C# linq的话直接取交集。var query=A.Intersect(B);

Qlin | 园豆:2403 (老鸟四级) | 2014-03-28 09:15
0

分别创建A,B的记录集,然后使用记录集的Filter功能,这样比2层循环快。

当然数据量不大的话,二者差不多。

chanchaw | 园豆:65 (初学一级) | 2014-03-28 09:32
1

循环长度小的数组.对大的数组做折半查找,由于短数组也是排好续的,所以每次查找到后都要把当前位置保存下来

截断长数组.

这是最快的了

吴瑞祥 | 园豆:29449 (高人七级) | 2014-03-28 10:03
0

在PHP里面可以使用

array_intersect方法来获得连个数组中值的交集,或者循环一个数组然后通过in_array来获取交集,最简单直接的方法还是前面说的

wh-王东 | 园豆:83 (初学一级) | 2014-03-28 10:13
0

如果是整数数组的话,不就可以直接比大小,第一个相同的,和最后一个相同的,记下其在A数组中的序号,就可以直接提取了

说整数数组,只是举个例子,你可以根据你数组的特征,做些这样的尝试

办幼儿园+国家电网1亿 | 园豆:227 (菜鸟二级) | 2014-03-28 10:32

不连续的话,好像行不通

支持(0) 反对(0) coder_wang | 园豆:193 (初学一级) | 2014-03-28 10:37
1

算法问题还是算法来解决吧!

我用js实现一个,

<script type="text/javascript">
var A=[1,3,9,11,15,18,18,21]; 
var B=[2,3,8,10,11,18,18,23];

var result=[];

var a=A.pop();
var b=B.pop();
do
{ 
if(b>a)
{
b=B.pop();
}else if(b<a)
{
a=A.pop();
}else
{
result.push(a);
a=A.pop();
b=B.pop();
} 
}while(a!=undefined&&b!=undefined);

</script>

输出结果:result:[18, 18, 11, 3]

原理:两个一排序列的数组,重复的值一定是 归并时相等的值

收获园豆:10
我来也1010 | 园豆:212 (菜鸟二级) | 2014-03-28 10:52

和楼上的方法原理差不多   谢谢

支持(0) 反对(0) coder_wang | 园豆:193 (初学一级) | 2014-03-28 11:41
0

用distinct  这样符合要求么?

wolfy | 园豆:2636 (老鸟四级) | 2014-03-28 13:11
0

哥,一般人我不骂他,骂你是对你好。

-------------你写个算法要死人啊,自己不写算法能提高吗?

[秦时明月] | 园豆:738 (小虾三级) | 2014-03-28 13:43

?

支持(0) 反对(0) coder_wang | 园豆:193 (初学一级) | 2014-03-28 13:53
0

var value=(from v in A select v).Distinct().ToList(); 有提供的方法为什么不用呢?

秋刀鱼No1 | 园豆:31 (初学一级) | 2014-03-29 19:08

其实这是一道面试题

支持(0) 反对(0) coder_wang | 园豆:193 (初学一级) | 2014-03-31 17:14
0

其实就是归并排序的子问题。

白来了123 | 园豆:160 (初学一级) | 2014-05-05 10:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册