日期:2014-05-20  浏览次数:20837 次

来接分,顺便留下你的算法【求任意长度的两个正整数数组中 重复数字的个数】
假设有两个整数数组A、B,已知这两个数组长度任意,并且每个数组中的数字都是惟一的。
要求用较快的算法求解A和B中重复的数字个数。

------解决方案--------------------
先排序,再比较.
------解决方案--------------------
帮顶一下
------解决方案--------------------
var n1 = new[] { 1,2,3,4,5,6,7,8,9,10 };
var n2 = new[] { 0,2,4,6,8 };
var count=0;
foreach (var i in n1.Intersect(n2))
count++;
Console.Write(count);
Console.ReadLine();

------解决方案--------------------
用一个 HashSet 装入数组 A 的值,然后再循环 B,判断 B 中的数字是否在 HashSet 中,若在,则加入重复数字的列表,这是否会快一些呢?
------解决方案--------------------
C# code

看看我写得对不对
int[] Array1={1,2,3,4,5,6}
int[] Array2={11,2,3,4,5,6,7,8}
int len1=Array1.length
int len2=Array2.length
list<int> a=new list<int>
for (int i=0,i<len1,i++)
{
 a.add(Array1(i))

}
  for (int j=0,j<len2,j++)
  {
   if (!a.Contains(Array2(j)))
   {
   a.add(Array2(j))
    }
  }
int len3=a.length

return len1+len2-len3

------解决方案--------------------
仔细看下啊。
------解决方案--------------------
考虑七楼的建议,另外如果数组元素范围不是太大的话也可以直接用数组
开一个和元素范围一样大的数组(用位数组就可以),先遍历一个数组,在元素出现的位置标为1,再遍历第二个数组,如果元素相应的位置是1则说明重复
------解决方案--------------------
探讨
更正一下,更简单的办法是直接用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.0的特性

------解决方案--------------------
C# code

int[m] m1= new int{a1,a2,...,am};
int[n] m2= new int{b1,b2,...,bn};
int iEqualCount = 0 ;
for(int i =0;i<m;i++)
{
int iValue = m1[i];
for(int j=0;j<n;j++)
{
if(ivalue==m2[j])
iEqualCount ++;
}
}

------解决方案--------------------
把二个数组合成一个数组,然后排序,然后比较A[i]和A[i+1]是否相同,这样就行了.

------解决方案--------------------
JF
------解决方案--------------------
C# code
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace DemoInrtArray
{
  class Program
  {
    static void Main(string[] args)
    {
      int count = 0;
      int[] aArray = new int[] { 1, 2, 3, 45, 6, 7, 890 };
      int[] bArray = new int[] { 10, 20, 3, 6, 890, 100, 30, 1 };
      int lenA = aArray.Length;
      int lenB = bArray.Length;
      List <int> cpArray = new List <int>();
      if (lenA > lenB)
      {
        foreach (int a in aArray)
        {
          cpArray.Add(a);
        }
        foreach (int b in bArray)
        {
          if (cpArray.Contains(b))
          {
            count++;