我面临一个非常困难的情况,假设我有一系列动态数字。条件是数组可能包含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所以如果我必须在列表大小为20时从6个数字生成一个和,那么它将是n ^ 6,这是不期望的。
第二个想法
我虽然可以对List进行排序,但是我应该用什么逻辑来选择3个整数,这样它的总和在List中是唯一的。
让我们说我对列表进行排序并选择三个最小的数字或从排序列表中选择第3个3 + 1 =第4个和3 + 2 =第5个元素,sum=List[3]+List[4]+List[5];
这也是不期望的,不建议任何选择三个数字的模式。它应该是随机选择的,总和应该是唯一的。
所以我不知道为此生成最佳解决方案。
任何人都可以帮助我。
答案 0 :(得分:1)
只使用3个最大的数字。