首页 > 其他 > 详细

剑指Offer:连续子数组的最大和

时间:2014-07-28 15:27:13      阅读:328      评论:0      收藏:0      [点我收藏+]

题目: 输入一个整型数组, 数组里有正数也有负数. 数组中的一个或连续的多个整数组成一个子数组. 求所有子数组的和的最大值. 要求时间复杂度为O(n)

#include <stdio.h>

int maxsum_subarray(int a[], int n)
{
    if( a==NULL || n<=0 )
    {
        printf("Error.\n");
        return 0x80000000;
    }

    int i;
    int curmax = 0x80000000;
    int cursum = 0;
    for( i=0; i<n; i++ )
    {
        if( cursum <= 0 ) // 当前元素之前的若干个元素之和已经<=0; 以当前元素为起点, 继续往后求子数组的和
            cursum = a[i];
        else
            cursum += a[i];

        if( cursum > curmax ) // 更新新的最大值
            curmax = cursum;
    }
    return curmax;
}

int main(void)
{
    int a[] = {19,-20,3,10,-4,7,2,-5};
    int result = maxsum_subarray(a,8);
    printf("%d\n", result);

    return 0;
}

 

剑指Offer:连续子数组的最大和,布布扣,bubuko.com

剑指Offer:连续子数组的最大和

原文:http://www.cnblogs.com/DayByDay/p/3873008.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!