从一个动态数字数组中找出唯一的整数和

本文关键字:唯一 整数 数组 数字 动态 一个 | 更新日期: 2023-09-27 17:51:08

我正面临一个非常困难的情况,假设我有一个动态数字数组。条件是数组可以包含10到20个数字。可以包含10、12、14、…到20个整数。现在,根据ArrayList.Count(),我将从这个数组中选择3(如果数组包含10个整数)到6(如果数组包含20个整数)个数字,并将这些数字相加。假设这个数字是"X"。

现在我必须检查列表中是否存在任何三个整数,它们的和等于X,如果它们相等,那么我必须再次重复相同的过程,直到我从列表中找到一个唯一的和。

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

最初的想法

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

foreach (var i in List) // values of i = 1, 5, 8 (Assume)
{
    sum += listOfUniqueIntegers[i];
}

//修改第一个元素为List[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;
           }
       }
   }
}

但是这种方法的问题是它的时间复杂度是n^3,所以如果我必须从6个数字中生成一个和,当List大小为20时,它将是n^6,这是意料之外的。

第二个想法

我认为我可以对List进行排序,但是我应该用什么逻辑来选择3个整数,使它的和在List中是唯一的呢?

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

所以我不知道如何生成最优解。

有谁能帮帮我吗

从一个动态数字数组中找出唯一的整数和

只用最大的3个数字