给一个数组,求他的子串,使该子串的和最大

本文详细阐述了 Kadane 算法的核心思想及其在寻找最大子数组和问题上的应用。通过实例演示,展示了如何在给定数组中找出连续子数组的最大和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果f[m-1]>0, f[m]=f[m-1]+a[m]

f[m-1]<0, f[m]=a[m];

解释如下:

如果array[i,...k,....j]就是满足和最大的子串,那么对于任何k(i<k<j),必有array[i....k]和大于0,否则array[k+1,....j]和就大于array[i....j]



int kadane(const int array[],int length,int& left,int& right)

{

int i,cur_left,cur_right;

int max,cur_max;

max=cur_max=cur_left=cur_right=left=right=0;

for(int i=0;i<length;i++)

{

cur_max+=array[i];

if(cur_max>0)

{

cur_right=i;

if(max<cur_max)

{

max=cur_max;

left=cur_left;

right=cur_right;

}

}

else

{

cur_max=0;

cur_left=cur_right=i+1;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值