C# 从动态数字数组中查找整数的唯一和

C# 从动态数字数组中查找整数的唯一和,c#,.net,arrays,windows,list,C#,.net,Arrays,Windows,List,我面临着一个非常困难的局面,假设我有一个动态数字数组。条件是数组可能包含10到20个数字。它可以包含10,12,14。。。到20个整数。现在,基于ArrayList.Count(),我将从这个数组中选择3(如果数组包含10个整数)到6(如果数组包含20个整数),并将这些数字相加。说那个数字是“X” 现在我必须检查列表中是否有三个整数的和等于X,如果它等于X,那么我必须重复同样的过程,直到我从列表中找到一个唯一的和 那我怎么做呢?最好的是数组中的所有数字都是唯一的,数组中的数字没有重复 第一个想法

我面临着一个非常困难的局面,假设我有一个动态数字数组。条件是数组可能包含10到20个数字。它可以包含10,12,14。。。到20个整数。现在,基于ArrayList.Count(),我将从这个数组中选择3(如果数组包含10个整数)到6(如果数组包含20个整数),并将这些数字相加。说那个数字是“X”

现在我必须检查列表中是否有三个整数的和等于X,如果它等于X,那么我必须重复同样的过程,直到我从列表中找到一个唯一的和

那我怎么做呢?最好的是数组中的所有数字都是唯一的,数组中的数字没有重复

第一个想法

我想到一个主意,对于3个数字,假设我生成一个唯一的数字

foreach (var i in List) // values of i = 1, 5, 8 (Assume)
{
    sum += listOfUniqueIntegers[i];
}
//将第一个元素固定为列表[i]

for (int i = 0; i < List.Count()-2; i++)
{
   // Fix the second element as List[j]
   for (int j = i+1; j < List.Count()-1; j++)
   {
       // Now look for the third number
       for (int k = j+1; k < List.Count(); k++)
       {
           if (List[i] + List[j] + List[k] == sum)
           {
             // Here I will again create one more unique value  
             // and assign it to sum and repeat i = 0, j = 0, k = 0;

           }
       }
   }
}
for(int i=0;i
但是这种方法的问题是它的时间复杂度为n^3,所以如果我必须在列表大小为20时从6个数字生成一个和,它将是n^6,这是不期望的

第二个想法

我想我可以对列表进行排序,但是我应该使用什么逻辑来选择3个整数,这样它的和在列表中是唯一的

假设我对列表进行排序并选择三个最小的数字,或者从排序后的列表中选择第三个3+1=4,第三个3+2=5元素,以及
sum=list[3]+list[4]+list[5]
这也是不可能的,不建议选择三个数字的任何模式。它应该是随机选择的,并且总和应该是唯一的

因此,我没有任何想法为这个问题生成最佳解决方案


谁能帮帮我吗。

就用3个最大的数字。

为什么会这样?在我看来,总是选择3个最大的就行了。否则,如果你同时有正数和负数会怎么样?@在这两者之间,你是对的,我心里还有一个限制。更新。最小的数字或三个最大的数字不是预期的场景,我更新了我的问题,甚至让我们假设我选择任何数字4,然后我选择4+1,和下一个4+2元素,这也是不预期的。应该是random@Debhere如果你想要一个确定性算法,无论如何,它会使用一个导致模式的场景。否则,你只需生成每一个组合,然后随机选择一个想要的答案。但是如果我生成所有可能的组合数字,然后找到唯一的,时间复杂度会很高。在对列表进行排序之后,我正在搜索任何最优的方法。我不确定是否有一种无偏见的方法可以找到唯一的和,从而避免计算每个组合并随机选择唯一的组合。任何捷径或聪明的伎俩,如阿米尔的答案,都注定是有偏见的。