java 数组的子数组_java数组中最大的子数组之和

一个有N个整数元素的一维数组,那么子数组之和的最大值是什么?

例如:-2 5 3 -6 4 -8 6 maxsum=8

无论是高中学习c语言还是现在的Java,首先想法是就是找出所有的子数组,重复计算,然后求其和,取最大。

int Maxsum1(int *array,int n)

{

int max=-INF;

int sum;

int i,j;

for(i=0;imax)

max=sum;

}

}

return max;

}

607430d579428dcbd76c92e473aa5be5.png

还有一种想法,累加。重复累加,只要大于0,就说明当前的“和”可以继续增大,如果小于0了,说明“之前的最大和”已经不可能继续增大了,就从新开始。

int Maxsum3(int *array,int n)

{

int max=-INF;

int sum=0;

for(int i=0;imax)

max=sum;

}

return max;

}

0a6798229978002cdbc21c897c65753c.png

附网络上高端的动态规划求解

2个数组的

b0439b7ad2576f98612b61553f0309cd.png

更短的

b838fe55c32c06646070c7c1bc06066e.png

真正接受的思路:

从左边开始,在这个过程中记录一个当前子数组的最大值,前几项小于零时则刷新所有数据,从后面一个数重新开始,当发现累加结构大于记录的最大值时,则替换,最后比较完后,记录的最大值就为真实的最大值。

感谢各位网络技术好人的分享==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值