您的位置:首页 > 编程语言 > C语言/C++

最大子数组之和(线性时间复杂度,C语言实现)

2014-03-26 10:42 671 查看
#include <stdio.h>
#include <stdlib.h>
#define NUM 7

void max_subarray(int *);

int main()
{
int A[NUM] = {-2,5,3,-6,4,-8,6};

for (int i = 0; i < NUM; i++)
{
printf("%d  ", A[i]);
}
printf("\n");

max_subarray(A);

return 0;
}

void max_subarray(int A[])
{
int max = -30;//当数组值全为负值时,max的初始化值必须小于其最大值。
int temp = -1;//初始化值小于0。
int s = 0, e  = 0, p = 0;//s记录开始,e记录结束位置。(记录的是数组下标)

for (int j = 0; j < NUM; j++)
{
if (temp < 0)
{
temp = 0;
p = j;
}
temp += A[j];
if (temp > max)
{
max = temp;
s = p;
e = j;
}

}
printf("%d %d %d\n", s, e,  max);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐