【编程之美】2.14 求数组的子数组之和的最大值

本文探讨了一种算法来找出数组中以特定元素结尾的最大子数组和。通过迭代计算并更新最大和,该算法高效地解决了这一问题。

做过的,就说下思路。

 

用Sum记录A[0...N-1]中 以第i个元素结尾的子数组中的最大和,

若以第i-1个元素结尾的子数组小于0,那么以第i个元素结尾的子数组中的最大和就是 A[i]本身 否则是A[i] + Sum(i-1的)

总结起来就是 Sum = (Sum > 0) ? A[i] + Sum : A[i];

再记录下所有出现过的Sum中最大的值就可以了。

#include <stdio.h>

int getMaxSubArraySum(int * a, int alen)
{
    int maxSum = a[0];
    int Sum = a[0];

    for(int i = 1; i < alen; i++)
    {
        Sum = (Sum > 0) ? Sum + a[i] : a[i];
        maxSum = (Sum > maxSum) ? Sum : maxSum;
    }

    return maxSum;
}

int main()
{
    int a[7] = {-2,5,3,-6,4,-8,6};
    int b[6] = {1,-2,3,5,-3,2};
    int c[6] = {0,-2,3,5,-1,2};
    int d[5] = {-9,-2,-3,-5,-3};
    int max = getMaxSubArraySum(d, 5);

    return 0;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值