我使用以下代码解决了this一致性测试:
private static int lesson2_1(int[] A) {
if (!Isvalid(A))
{
return -1;
}
List<int> d = A.Distinct().ToList();
foreach (var item in d)
{
var q = from one in A where one == item select one;
if (q.Count() == 1)
{
return item;
}
}
return -1;
}
private static bool Isvalid(int[] a)
{
if (a.Length == 0)
{
return false;
}
return true;
}
这些是结果:
我不知道如何解决这个问题,因为我还没有了解复杂性。有人可以指导我解决这个问题的正确方法吗?
非常感谢
答案 0 :(得分:1)
我的建议-不要重新发明轮子。 .Net具有很多内置功能。除非您有特殊要求,否则,Microsoft可能会比您更好地实施它。以下内容获得100%的得分:
using System;
using System.Linq;
class Solution {
public int solution(int[] A) {
return A.GroupBy(a => a).First(a => a.Count() %2 == 1).Key;
}
}
您的解决方案存在一些问题。
1)您未遵循测试规范。它指出
A中除一个值以外的所有值都出现偶数次。
这意味着您正在寻找的号码可能会出现3、5、7等。时间-您只需要检查1。
2)解决方案的时间复杂度很低。您正在遍历每个项目,并在每个循环中搜索每个项目。如果您考虑一下,则没有必要。您将必须遍历列表中的每个项目,但是如果您在进行过程中对其进行有效处理,则只需要遍历每个项目一次,然后遍历每个项目的存储桶即可。