查找重复多次重复的数字C#

时间:2017-01-07 07:01:37

标签: c# arrays

我们如何在重复两次以上的int数组中找到重复数字。我的一个例子如下:

public static void main()
{
      int[] array = { 3, 7, 9 , 7, 4, 9, 7 , 9}
      Dictionary<int,int> dic = new Dictionary<int,int>();
      foreach(var Val in array)
      {
         if(dict.containskey(Val)
           dic[Val] ++;
         else 
           dic[Val] = 1 ;
      }

   foreach (var pair in dic)
      if(key.value > 2 )
         Console.WriteLine(pair.key)
}

有没有更好的方法呢?在一次采访中我被问到了。我给出了上述被拒绝的解决方案。

编辑::我被要求编写一个内存较少且性能良好的程序。它不应该使用linq或任何内置的C#扩展方法......

6 个答案:

答案 0 :(得分:7)

对您的商品进行分组,只拍摄超过2次的商品:

array.GroupBy(x=>x).Where(x=>x.Count()>2).Select(x=>x.Key)

答案 1 :(得分:4)

由于没有为可以包含在此数组中的元素提供任何约束,您应该询问采访者是否需要具有O(n)时间复杂度和O(n)空间复杂度的解决方案* *或具有O(nlogn)时间复杂度和O(1)空间复杂度的解决方案**。

没有对数组中元素的约束,在O(n)时间复杂度和O(1)空间复杂度方面没有解决方案**。

因为他拒绝你的解决方案(这是O(n)时间复杂度和O(n)空间复杂度**)显然他正在寻找第二个。实现这一目标的一种方法是首先对数组进行排序,然后对其进行迭代以找到重复数据。

备注**:为空间复杂度提供的示例值不包括原始数组占用的空间,只包含所需的额外空间。

答案 2 :(得分:0)

试试这个:

Int[] array = { 3, 7, 9 , 7, 4, 9, 7 , 9};
string duplicates="";
for(int i=0;i<array.length;i++)
 {
   for (int j=i+1;j<array.length;j++)
    {
       if(array[i]==array[j])
        {
          duplicates+=Convert.tostring(array[i]) + ",";
        }
    }
 }

答案 3 :(得分:0)

最快的解决方案是对数组进行排序,然后计算排序数组中相等的后续数字。这种方法的复杂性是O(N log N),其中N是数组中的数字的计数。为此,您可以使用List<int>类型。它包含所需的排序方法。

答案 4 :(得分:0)

我建议您执行以下操作:

  • 数组中找到Max值。
  • 创建一个大小为Frequent Array的{​​{1}}。
  • 循环投放数组并根据数组值更新Maxvalue + 1

    Frequent Array

复杂性将是&gt;&gt;&gt; O(N logN + Maxvalue)

答案 5 :(得分:0)

static void printRepeating(int [] arr,                             整数大小)     {         我

    Console.Write("The repeating" +  
                   " elements are : "); 

    for (i = 0; i < size; i++) 
    { 
        if (arr[ Math.Abs(arr[i])] >= 0) 
            arr[ Math.Abs(arr[i])] = 
                -arr[ Math.Abs(arr[i])]; 
        else
            Console.Write(Math.Abs(arr[i]) + " "); 
    }          
}  **strong text**