我们如何在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#扩展方法...
对您的商品进行分组,只拍摄超过2次的商品:
array.GroupBy(x=>x).Where(x=>x.Count()>2).Select(x=>x.Key)
Run Code Online (Sandbox Code Playgroud)
由于没有任何约束可以包含在此数组中,因此您应该询问面试官他是否想要具有O(n)时间复杂度和O(n)空间复杂度**的解决方案,或者是具有O(nlogn)时间复杂度和O(1)空间复杂度**。
如果没有对数组中元素的限制,就无法解决O(n)时间复杂度和O(1)空间复杂度**的问题。
而且因为他拒绝了您的解决方案(时间复杂度为O(n)和空间复杂度为O(n)**),显然他正在寻求第二种解决方案。实现此目的的一种方法是,首先对数组进行排序,然后对其进行迭代以查找重复项。
备注**:为空间复杂度提供的示例值不包括原始数组占用的空间,仅包括所需的额外空间。