算法与数据结构——更新

1,求一个整数数组(可包含正数、负数、0)的子数组的最大和。

int maxSubarraySum(int a[], int size){

    int max = -(1<<31);

    int sum = 0;

    for (int i = 0; i < size; i++) {

        if (sum < 0) {

            sum = 0;

        }

        sum += a[i];

        max = MAX(max, sum);

    }

    return max;

}

int main(int argc, const char * argv[]) {

    @autoreleasepool {

#pragma mark - 求子数组的最大和

        int c[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};

        int b[] = {-6, -5, 0, 0, -3, -6, -7, -8};

        int result = maxSubarraySum(b, 8);

        NSLog(@"result : %d", result);

    }

    return 0;

}


原理:复杂度为o(n),循环了n次。如果和为负,无论后面加的什么数,和都会减小,所以置0。取当前和与曾经和之中最大的那个值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值