Codility测试结果不清楚

时间:2020-05-25 20:33:43

标签: c#

我使用以下代码解决了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;
    }

这些是结果:

enter image description here

我不知道如何解决这个问题,因为我还没有了解复杂性。有人可以指导我解决这个问题的正确方法吗?

非常感谢

1 个答案:

答案 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)解决方案的时间复杂度很低。您正在遍历每个项目,并在每个循环中搜索每个项目。如果您考虑一下,则没有必要。您将必须遍历列表中的每个项目,但是如果您在进行过程中对其进行有效处理,则只需要遍历每个项目一次,然后遍历每个项目的存储桶即可。

相关问题