C# 如何在数组中找到一个项,该项之前的所有值之和都是特定值?(C+;+;和C)

C# 如何在数组中找到一个项,该项之前的所有值之和都是特定值?(C+;+;和C),c#,c++,algorithm,C#,C++,Algorithm,假设我有一个特定大小的整数数组(比如1000) 我想查找此数组中某个项的索引,给定此项之前(或包括此项)数组中所有项的总和 例如,假设我有以下数组: int[] values={1,2,3,1,3,6,4,8,2,11} 输入值是6,然后我需要返回索引2(在上面的示例中,3是从零开始的索引),当给定10时,我应该返回索引4 最快的方法是什么?在C++和C<?/p>如果你只需要做一次,那么天真的方法也是最快的方法:走数组,保持运行的总数。达到目标和后,返回当前索引 如果需要对不同的总和运行多个

假设我有一个特定大小的整数数组(比如1000)

我想查找此数组中某个项的索引,给定此项之前(或包括此项)数组中所有项的总和

例如,假设我有以下数组:

 int[] values={1,2,3,1,3,6,4,8,2,11}
输入值是6,然后我需要返回索引2(在上面的示例中,3是从零开始的索引),当给定10时,我应该返回索引4


最快的方法是什么?在C++和C<?/p>如果你只需要做一次,那么天真的方法也是最快的方法:走数组,保持运行的总数。达到目标和后,返回当前索引

如果需要对不同的总和运行多个查询,请创建一个数组并在其中设置总和,如下所示:

var sums = new int[values.Length];
sums[0] = values[0];
for (int i = 1 ; i < sums.Length ; i++) {
    sums[i] = sums[i-1] + values[i];
}
var sums=newint[values.Length];
和[0]=值[0];
for(int i=1;i

如果所有值均为正值,您可以对
总和运行二进制搜索,以获取
O(log(n))
中的索引学习BST,这将是解决您问题的最快算法:


5是有效的输入值吗?(它不是数组中某个项之前或包含该项的所有项的总和。)如果它是有效输入,答案是什么?@jwpat7 5是有效输入,结果是2(与6相同),因为第2项之前的值之和小于5,第2项之后的值之和大于5。