有个数组列表,List<int[]> arr,数组元素为6个,号码最大值为35,
现希望对数组两两比较,求它们之间有几个相同元素。
我所能想到的最高效的方法如下所示,求其它更高效的算法:            for (int i = 0; i < arr.Count(); i++)
            {
                int[] exist = new int[36];
                foreach (int n in arr[i])
                {
                    exist[n] = 1;
                }                for (int j = i + 1; j < arr.Count(); j++)
                {
                    int count=0;
                    foreach (int t in arr[j])
                    {
                        count += exist[t];
                    }
                }                //处理count            }

解决方案 »

  1.   

    处理count的位置有问题,应该上移,代码应该如下:            for (int i = 0; i < arr.Count(); i++)
                {
                    int[] exist = new int[36];
                    foreach (int n in arr[i])
                    {
                        exist[n] = 1;
                    }                for (int j = i + 1; j < arr.Count(); j++)
                    {
                        int count=0;
                        foreach (int t in arr[j])
                        {
                            count += exist[t];
                        }                    //处理count
                    }
                }
      

  2.   

     int[] ary;
                var newary = ary.GroupBy(t => t).Select(t => new { count = t.Count(), key = t.Key }).Where(t => t.count > 1).ToArray();
                foreach (var t in newary)
                    Console.WriteLine(t.key + ":" + t.count);
      

  3.   

    int[] js =new int[35]{0};
     
    for (int i = 0; i < arr.Count(); i++)
                {
                   js[arr[i]] = js[arr[i]]+1;                    }
      

  4.   


    试过,用LINQ效率不是一般的低,比我慢10倍不止
      

  5.   

    不知道这样行不行呢        int[] arr1={1,3,11,23,33,35,24};
            int[] arr2 = { 1, 13, 11, 22, 32, 35, 24 };
            string arr1str = ",";
            int count = 0;
            foreach (int i in arr1)
            {
                arr1str += i.ToString() + ",";
            }
            foreach (int i in arr2)
            {
                if (arr1str.Contains("," + i.ToString() + ","))
                    count++;
            }
      

  6.   

    元素取值相同且有限,可以使用bitmap作为hash。然后用基数排序/桶排序