每个int变量的值不同

时间:2014-09-02 17:14:00

标签: c# algorithm

我有五个int变量:

int firstSequence;
int secondSequence;
int thirdSequence;
int fourthSequence;
int fifthSequence;

这些变量中的每一个都可以具有1-5的值。如果每个变量都具有唯一值,如何以最有效的方式检查?我的意思是只有一个可以有值= 1等。

private bool IsOrderCorrect()
    {
        if(firstSequence != secondSequence && ...)
    }

5 个答案:

答案 0 :(得分:13)

只需将它们放入数组中,然后使用Distinct

new [] { 
         firstSequence, 
         secondSequence, 
         thirdSequence,
         fourthSequence, 
         fifthSequence 
       }.Distinct().Count() == 5;

答案 1 :(得分:2)

你可以尝试

(  (1 << firstSequence)
 | (1 << secondSequence)
 | (1 << thirdSequence)
 | (1 << fourthSequence)
 | (1 << fifthSequence))
== (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5);

答案 2 :(得分:1)

你去吧

List<int> uniqueCheck = new List<int>() { firstSequence, secondSequence, thirdSequence, fourthSequence, fifthSequence };

if(uniqueCheck.Distinct().Count() == uniqueCheck.Count())
{
   //they are unique
}

答案 3 :(得分:0)

我认为这不是最有效的方式。

最有效的方法是将它们相加并确保总和等于15。

在我的机器上测试1000000次导致.Distinct()。Count()== 5方法占用244.77毫秒。

做同样的事情,但使用.Sum()== 15需要54.92,所以sum方法更有效。

话虽如此,使用Distinct()。Count(),会推广到更多情况,但是op要求最有效的方法。

编辑:

抱歉,当我输入原件时我很急,所以它有缺陷。我的一般方法保持不变,但不是对数字求和,而是应该求平方,我认为它应该等于55,如果数字是分散的,则应该总和为55.

使用平方和进行测试需要139毫秒,这仍然比.Distinct()更快.Count()== 5

所以我的答案应该更新为.Select(x =&gt; x * x).Sum()== 55

答案 4 :(得分:-3)

如果他们在阵列中,那将非常容易

        int[] numbers = new int[] {1,2,3,4,5};

        for (int i = 0; i < numbers.Length; i++)
        {
            for (int j = 0; j!= i && j < numbers.Length; j++)
            {
                if (numbers[i] == numbers[j]) {
                    // you know what to do
                }
            }
        }