在数组上找到N个连续的整数,其总和(连续整数)S是我所拥有的整数

时间:2017-03-10 17:58:12

标签: c# arrays algorithm

explanation

我一直在盯着这个问题几分钟。 在我问这个任务之前我做了一些研究,但是在不同的情况下它们并没有包括我真正需要的东西。 我在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添加到代码中,但实际上并没有那么好。 所以,如果有人帮助我,我真的很感激,但是我坚持使用这个算法。 谢谢!

2 个答案:

答案 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