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

来源:互联网 发布:c语言制表符是什么 编辑:程序博客网 时间:2024/05/24 02:42

问题:

已知有一数组整型array[N],其中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)。

0 0
原创粉丝点击