连续区间最大和问题

  连续区间最大和问题指的是在给定的一串序列中找出和最大的连续区间。解决这类问题有下面五种方法:

1. o(n^3) 暴力枚举

  这种方法就不需要多说了,最简单的方法,但复杂度很高,数据量大时不可取。

2. o(n^2) 预处理+枚举

  这种方法无非是在上一种方法的基础上做些优化。sum[i]表示从1-i 这段区间的和,在输入的时候就可以进行预处理,枚举每一段区间 i-j 其和为 sum[j]-sum[i-1]。虽然加了预处理优化,但面对大数据量时人仍无能为力。

3. o(nlogn) 分治

  其大致思想是,若对于一段区间[L,R),其中mid=(L+R)>>1,将区间分成左右两边[L,mid),[mid,R),对于两边区间,我们可以递归求解,而对于横跨左右两段区间的区间,我们再特殊处理。

  核心代码:

  

4. o(n) DP

  经典的dp问题,状态转移方程:dp[i]=max{dp[i-1]+num[i],num[i]}

5. o(n) xx

  先像方法4那样预处理,然后线性扫描,每次维护一个连续区段的最小值min(sum[1]-sum[i-1]),然后更新连续区间最大和ans=max(ans,sum[i]-min)。

  核心代码:

  

转载于:https://www.cnblogs.com/abrain/archive/2012/04/26/2471734.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值