2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
選項(xiàng)1
因此,如果您想獲得示例中的準(zhǔn)確結(jié)果,可以使用此方法。它將返回一個(gè)部分和數(shù)組,您可以稍后對其進(jìn)行匯總以獲得結(jié)果:
private static long[] CumulativeSums(long[] values)
{
if (values == null || values.Length <= 1) return new long[0];
var results = new long[values.Length];
results[0] = values[0] + values[1];
for (var i = 1; i < values.Length - 1; i++)
{
results[i] = results[i - 1] + values[i + 1];
}
return results;
}
并像這樣使用它:
var numbers = new long[] { 12, 15, 17, 19 };
var sumOfCumulativeSums = CumulativeSums(numbers).Sum();
sumOfCumulativeSums將是 134 。
選項(xiàng) 2
但累積和的實(shí)際正確表示是:a, a+b, a+b+c, ...。因此,如果您想要返回正確累積和的方法的正確表示,您可以改用此方法:
public static long[] CumulativeSums(long[] values)
{
if (values == null || values.Length == 0) return new long[0];
var results = new long[values.Length];
results[0] = values[0];
for (var i = 1; i < values.Length; i++)
{
results[i] = results[i - 1] + values[i];
}
return results;
}
編輯
希望這可以幫助您以任何一種方式解決您的問題,如果您對代碼有任何疑問或編輯,請?zhí)岢觥?/p>

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
您還可以在沒有任何中間數(shù)組分配的情況下獲得總和:
static int Cumulate( int[] numbers )
{
if ( numbers == null || numbers.Length < 2 )
return 0;
Array.Sort( numbers );
var prevsum = numbers[0] + numbers[1];
var sum = prevsum;
for ( int i = 2 ; i < numbers.Length ; i++ )
{
prevsum += numbers[i];
sum += prevsum;
}
return sum;
}
- 2 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報(bào)