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

Man*_*vda 8 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)
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mak*_*kin 7

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

array.GroupBy(x=>x).Where(x=>x.Count()>2).Select(x=>x.Key)
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 5

由于没有任何约束可以包含在此数组中,因此您应该询问面试官他是否想要具有O(n)时间复杂度和O(n)空间复杂度**的解决方案,或者是具有O(nlogn)时间复杂度和O(1)空间复杂度**。

如果没有对数组中元素的限制,就无法解决O(n)时间复杂度和O(1)空间复杂度**的问题。

而且因为他拒绝了您的解决方案(时间复杂度为O(n)和空间复杂度为O(n)**),显然他正在寻求第二种解决方案。实现此目的的一种方法是,首先对数组进行排序,然后对其进行迭代以查找重复项。

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