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

取数组中和最大的一段连续序列

2014-05-15 11:42 288 查看
问题:

已知有一数组整型array
,其中N很大,array数组中存在正数、负数和0。求其实位置start和end,使得array[start]到array[end]所有元素之和最大。

算法过程:

1、初始化start、end、p、q为array数组的第一个元素位置,初始化max为array[0],sum为array[0];

2、计算sum = sum+array[q],若p等于q,则sum = sum/2;

3、若Max小于sum,则令Max为sum,start为p,end为q,q后移一位。否则,若sum小于等于0,则q后移,直到array[q]大于0时(若q之后的元素均小于等于0,则退出程序),令p等于q,sum等于array[p],若sum大于0,则q后移一位。

4、若q >= N,则退出程序,start即为找到的起始位置,end即为终止位置,Max即为最大值。否则,转第2步。

算法时间复杂度分析

以q后移为算法的基本步骤,算法的时间复杂度为O(n)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐