求连续和最大的数组段

ralhander 2009-10-28 02:05:19
n个元素的连续数组,有正有负
求连续和最大的一段数组元素。

突然想到这个问题,请高手解答。
...全文
256 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kon3155 2009-10-28
  • 打赏
  • 举报
回复
见 http://topic.csdn.net/u/20081113/08/646efaba-c65b-4ed4-8de8-224dbf712d2e.html 3楼
时间复杂度O(N)
holyblood 2009-10-28
  • 打赏
  • 举报
回复
可不可以这样:

先将数组按正负分段,即工b[0]:={a[0],a[1],……,a[j]|a[i]>=0},b[1]={a[j+1],a[j+2],……,a[k]|a[i]<0},……,以此类推;
首先可以肯定所求段一定以全正的b[i]开头,以全正的b[i]结尾,若不然,一定可以在开头(结尾)处补充上(下)一段正的b[i]使和最大;
再可以证明一个事实:如果b[i](正段)+b[i+1](由定义一定是负段)<=0,则可以这两段必不在所需段内开头或结尾,若不然,去掉这两段后和应该更大,从开头找第一个b[i]+b[i+1]>0的段,将其前面的元素去掉,同理从结尾找第一个b[i]+b[i+1]>0的段,将其后面的元素去掉;
令c[k]=b[i]+b[i+1],其中b[i]是正段和,所得一新数列c[k],重复上面将c[k]分正负段,再考虑前面介绍的方法以此递归;
这样至多递归log2N次,每次递归要O(N)步。
绿色夹克衫 2009-10-28
  • 打赏
  • 举报
回复
连续子段最大和问题,LZ可以搜索一下!已经讨论过很多遍了,用Dp,O(n)就可以解。

只要子段的和>0,那么就继续累加,否则从下一个数开始重新算!
leafank 2009-10-28
  • 打赏
  • 举报
回复
自己一点想法,以连续负数为分割,把数组分为多个数组段,然后检测各个负数段的和对前后正数段的和的影响,以次来获得影响最小的一个
ralhander 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 silitex 的回复:]
A[0] + ... + A[j-1] <= 0
-->
A[0] + ... + A[i-1] <= 0
[/Quote]
这个思想是好的,但不一定对,比如说最大连续和在你计算过程中被抛弃了呢?-1 9 -10 12 -13.。。。。。
Silitex 2009-10-28
  • 打赏
  • 举报
回复
A[0] + ... + A[j-1] <= 0
-->
A[0] + ... + A[i-1] <= 0
Silitex 2009-10-28
  • 打赏
  • 举报
回复
倒是想到了一个方法可以快速求解,方法如下:
假设A[i]~A[j]就是那个要求最大的两个断点,那么有如下条件成立:
A[i] + ... + A[j] >= A[0] + ... + A[i] + ... A[j]
即A[0] + ... + A[j-1] <= 0
所以,程序分别从两端开始加,如果判断到小于0,则说明前面连续单元可以放弃不要。
源代码见下一贴。
ralhander 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 donkey301 的回复:]
设原数组为A[n]
新生成一个数组B[n]
B[n] = A[0]+A[1]+...+A[i]
然后判断B[j]-B[i],其中j>i的最大值。最大值的i,j点就是要求的两个端点
[/Quote]
俄,这个嘛,我想到过用这个数组求解一个数组最大差值问题。。
没有其他的更好的方法了吗。。比如用堆和栈。。
donkey301 2009-10-28
  • 打赏
  • 举报
回复
搞错了一点,应该是i+1,j是要求的区间两个端点
donkey301 2009-10-28
  • 打赏
  • 举报
回复
设原数组为A[n]
新生成一个数组B[n]
B[n] = A[0]+A[1]+...+A[i]
然后判断B[j]-B[i],其中j>i的最大值。最大值的i,j点就是要求的两个端点
ralhander 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 veron_04 的回复:]
计算所有可能的连续和,排序比较。。
[/Quote]
这个复杂度太高了
贝隆 2009-10-28
  • 打赏
  • 举报
回复
计算所有可能的连续和,排序比较。。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧