一串数字,求其中连续的10个数字最大的和的算法

数字记录有上万条,我要求其中连续的10个数字(也可能是20个、30个等等)的最大和,求快捷高效的算法,求各位大神赐教
最好是用C#书写的算法

你这个问题如另个一个哥们儿说的那样,性能优化空间不大,有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 ;j<space;j++){
sum1 += 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 ;i<maxindex + interval;i++){
maxsum += data[i];
}

alert(maxindex + "/" + maxsum);
--------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
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 ;j<space;j++){
sum1 += 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 ;i<maxindex + interval;i++){
maxsum += data[i];
}

alert(maxindex + "/" + maxsum);
</script>
</head>
<body>

</body>
</html>

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-02

我能想到的就是逐个加,当然对空间复杂度要求不高你可以先拆成相应的向量作并行处理。给你个python的例子:

def maxsum(list,number):
    result=0
    temp=0
    for i in range(len(list[:1-number])):
        for j in range(number):
            temp+=int(a[i+j])
        result=max(result,temp)
        temp=0
    return result

number就是连续的数量 list就是数字列表


因为没有办法排序,所以我觉得时间复杂度优化的可能性不大

本回答被网友采纳

一串数字,求其中连续的10个数字最大的和的算法
最后面是一个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 spac...

一道C语言题 求 一个数组中 连续数字的最大和
while (a[i] < 0)\/\/该循环从左侧开始找第一个非负数 i记录其下标 ++i;max = 0;temp = 0;\/\/该循环找到整个数组中和最大的连续正数 \/\/并用left和right分别记录该段连续正数最左边和最右边两个正数的下标 for (k=0; i<10; ++i) { if (a[i] >= 0) { j = i;while (a[i] ...

在excel中如何在数据中找出最大或最小的10个数?
对此有一个解决办法,可以以max1为分割点将N数组分成前后两部分,然后分别遍历这两部分得到两个最大数,然后二者取一得到max2。 也可以遍历一遍就解决此问题,首先维护两个元素max1,max2(max1=max2),取到N中的一个数以后,先和max1比,如果比max1大(则肯定比max2大),直接替换max1,否则再和max2比较确定是否替换...

求C语言 输入10个数 输出最大值
1.首先需要定义一个整型数组空间,因为这里需要输入十个数,所以数组空间为10个。2.接着定义一个最大值Max,初始默认值为0,这个用于后续值的比较。3.接着使用for循环,来连续接收10个数字的输入。4.每次接收到一个数后,使用Max进行比较,如果比Max则将Max更新为更大的值。5.循环结束后,输出最终...

写一个在一百万个数字中求十个最大的数的算法
建立一个最大堆,O(N)连续10次从堆中弹出一个数,10*(logN)总复杂度O(N)

海量数据处理 大量数据中找出最大的前10个数 (Top K 问题)
eg:有10亿个Long型整数,存储在一个文件中,如果找出其中最大的10个?最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序。每个Long类型占8个字节,10亿个数就要占用7GB+的存储空间,对于一些可用内存小于7GB的计算机而言,很...

...的算法:依次将10个数输入,要求输出其中最大的数.
流程图。。。没法画,口述一下吧:1.读取输入的数字a 2.循环读取下一个数字b;3.比较a和b,将他们中比较大的数值,赋值给a 4.继续循环直到十个数输入完毕 5,输出a即为最大数。

求C语言“依次将10个数字输入,要求将其中最大的数字输出”的算法
{ int i;int a[10],max;\/\/定义数组a[10],最大值max printf("请输入10个数:\\n");\/\/提示语句 for(i=0;i<10;i++)\/\/循环体,输入10个数,数字之间用空格分开 scanf("%d",&a[i]);\/\/读入数据 max=a[0];\/\/初始化最大值max for(i=0;i<10;i++)if(a[i]>max)max=a[i];...

怎样通过排列组合算法求数字和?
支持16384个数的部分情况)其中说明文字和公式摘录如下:A4开始的一列:以下是依序数的二进制数位,当数位为1则参与加法,C4中的公式(选中A4向下填充。)=SUMPRODUCT(OFFSET(C4:IV4,0,0,1,$C$1),OFFSET(C$2:IV$2,0,0,1,$C$1))数组中数的总个数C1中的公式=COUNTA(C$2:IV$2)=COUNTA(...

一道pascal题:输入10个正整数,将这10个数字按从大到小的顺序排列
排序二叉树:每一个参加排列的数据对应二叉树的一个结点,且任一结点如果有左(右)子树,则左(右)子树各结点的数据必须小(大)于该结点的数据。中序遍历排序二叉树即得排序结果。程序如下:program pxtree;const a:array[1..8] of integer=(10,18,3,8,12,2,7,3);type point=^nod; nod=record w:integer...

相似回答