我一直在盯着这个问题几分钟。 在我问这个任务之前我做了一些研究,但是在不同的情况下它们并没有包括我真正需要的东西。 我在SO中找到了这段代码。
static int GetLargestSum(int[] array, int n, int sum)
{
int largestSum = 0;
int previousSum = 0;
for (int i = 0; i <= array.Length - n; i++)
{
if (i == 0)
{
for (int j = 0; j < n; j++)
{
largestSum += array[j];
}
previousSum = largestSum;
}
else
{
int currentSum = previousSum - array[i - 1] + array[i + n - 1];
if (currentSum > largestSum)
{
largestSum = currentSum;
}
previousSum = currentSum;
}
}
return largestSum;
}
是的,这是有效的,但如果仅适用于最大的总和。 我试图修改它以将sum var添加到代码中,但实际上并没有那么好。 所以,如果有人帮助我,我真的很感激,但是我坚持使用这个算法。 谢谢!
答案 0 :(得分:2)
解决问题的方法是迭代数组的每个段并计算其总和。粗略的初稿看起来像这样
public static int ConsecutiveSumArrangements(int[] vals, int count, int sum)
{
var number = 0;
for (int i = 0; i < (vals.Length - count); i++)
{
var segSum = vals.Skip(i).Take(count).Sum();
if (segSum == sum)
{
number++;
}
}
return number;
}
答案 1 :(得分:0)
也许以另一种方式思考,而不是尝试更正此代码。一个想法是使用幻灯片窗口。伪代码看起来像
sum = 0
sol = 0
start = 0
end = 0
// sum of the first m elements
while end < m
sum = sum + s[end]
end = end + 1
If sum == d
sol = sol + 1
while end < n
sum = sum + s[end]
sum = sum - s[start]
end = end + 1
start = start + 1
if sum == d
sol = sol + 1
// in the loop we add the next element and subtract the first element
//so, we keep the length of m elements