来接分,顺便留下你的算法【求任意长度的两个正整数数组中 重复数字的个数】

cadust 2009-03-25 08:28:34
加精
假设有两个整数数组A、B,已知这两个数组长度任意,并且每个数组中的数字都是惟一的。
要求用较快的算法求解A和B中重复的数字个数。
...全文
1901 191 打赏 收藏 转发到动态 举报
写回复
用AI写文章
191 条回复
切换为时间正序
请发表友善的回复…
发表回复
andychen2010 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 booker 的回复:]

更正一下,更简单的办法是直接用Intersect.Count()方法:

var n1 = new[] { 1,2,3,4,5,6,7,8,9,10 };
var n2 = new[] { 0,2,4,6,8 };
Console.Write(n1.Intersect(n2).Count());

这个是c#3.……
[/Quote] 还有这方法,好!!
Berson_C 2011-10-08
  • 打赏
  • 举报
回复
用HashMap最快,如果A是m个数,B是n个数的话,循环M+N次就行了,时间是O(m+n)
wangchunlin880210 2010-02-04
  • 打赏
  • 举报
回复
接分
jiaoge01 2010-02-03
  • 打赏
  • 举报
回复
不错建议的都很积极 学习了 学习了
youzelin 2010-02-03
  • 打赏
  • 举报
回复
不用双循环,但循环搞定


public static int GetCommonCharCount(int[] a, int[] b)
{
Array.Sort(a);
Array.Sort(b);

int commonCount = 0;
for (int i = 0, j = 0; i < a.Length && j < b.Length; )
{
if (a[i] < b[j])
{
i++;
}
else if (a[i] > b[j])
{
j++;
}
else
{
commonCount++;
i++; j++;
}
}

return commonCount;
}
kaishiyouxi 2010-01-28
  • 打赏
  • 举报
回复
哈哈 有人 N次 回帖 接分 有意思。。。
antony1029 2010-01-28
  • 打赏
  • 举报
回复
jf
itliyi 2010-01-28
  • 打赏
  • 举报
回复
up
whnjrm 2010-01-14
  • 打赏
  • 举报
回复
想法跟14楼一样。
每出现一次A[i]=A[i+1],Counter+1。
xuming120 2010-01-14
  • 打赏
  • 举报
回复

int[] str = { 1, 2, 5, 6, 9 ,10,33};
int[] str1 = { 2, 6, 8, 10, 11,9 };
int ii = 0;
foreach (int i in str)
{
foreach (int j in str1)
{
if (i.ToString().Equals(j.ToString()))
{
ii++;
}
}
}
Response.Write(ii);
henry827 2009-08-24
  • 打赏
  • 举报
回复
应该先排序,然后从个数较少的数组读取数字拿到另一个数组中按照2分来查找,这个方法在数据较大的时候会更有效,如果数组本来就比较小,优秀的算法也不一定能有多大的优势.
XIANTANZI 2009-03-27
  • 打赏
  • 举报
回复
好多有创意的想法!!!
zhuweiping2003 2009-03-27
  • 打赏
  • 举报
回复
118 和 156 的算法很相近哈。。
我顶
wqshandian 2009-03-27
  • 打赏
  • 举报
回复
给个简单算法:
1、将A,B中出现的数置位放在C,D两个地方(至于要置在什么地方,自己想办法)
2、将C,D这两个地方作类似与"&"运算,得E。
3、E中被置了位的个数,即为A,B中重复数的个数。
booker 2009-03-27
  • 打赏
  • 举报
回复
lz结贴吧,回复的次数都快赶上你的分了
zifeng759 2009-03-27
  • 打赏
  • 举报
回复
学习
熊孩子开学喽 2009-03-27
  • 打赏
  • 举报
回复
比较赞同110楼的算法
如果两个数组元素中最大的数值不超过可以定义的数组最大长度的话,只需要两次循环就可以(两次循环,而不是两重循环)
从复杂度来说是最简单的了,如果数组元素并不多,而数组元素的数值很大的话,速度不一定是最快.
happy398182130 2009-03-27
  • 打赏
  • 举报
回复
可以试试用堆排序,它的算法相对于其他几种,最好情况下的实践复杂度和平均时间和最坏情况下的时间复杂度都比较小,而且所需辅助空间也比较小。所以相对于其他几种算法,可以试试这种!!
happy398182130 2009-03-27
  • 打赏
  • 举报
回复
可以试试用堆排序,它的算法相对于其他几种,最好情况下的实践复杂度和平均时间和最坏情况下的时间复杂度都比较小,而且所需辅助空间也比较小。所以相对于其他几种算法,可以试试这种!!
sdsyl 2009-03-27
  • 打赏
  • 举报
回复
学习中,呵呵
加载更多回复(168)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧