你这个问题如另个一个哥们儿说的那样,性能优化空间不大,有n个数字,至少要比较n次,不过我还是优化了下,尽可能的减少求和的次数与个数。所有的循环都是序号的比较,最后找出最大序列的index后,再求和。
我用js写的,这里没用什么特别语法,你稍微改下有var的地方就能换到c#了。最后面是一个html版本,保存为html文件可以在浏览器运行。先贴核心代码
var data = [1,32,2,5,65,33,12,56,5,9,32,33,12,67,65,2,6];//设置数字序列
var interval = 5;//设置连续数长度
var maxindex = 0;
for(var i=1,len = data.length - interval -1;i < len;i++){
var space = ( i - maxindex )>interval ? interval : (i -maxindex);
var sum1=0,sum2=0;
for(var j = maxindex ;jsum1 += data[j];
}
for(var j = i+interval-1;j>i+interval-1-space;j--){
sum2 += data[j];
}
if (sum2 > sum1){
maxindex = i;
}
}
var maxsum = 0;
for(var i = maxindex ;imaxsum += data[i];
}
alert(maxindex + "/" + maxsum);
--------------------------------------------------------------------------------
一排排,一座座,一盏盏,一朵朵;
一颗颗,一个个,一道道,一根根