和最大的连续子数组动态规划的理解

和最大的连续子数组-动态规划理解

题目要求

给定一个整数数组,包含正负数且无序,找出和最大的连续子数组,比如数组[1,1,-5,6,7,-2],则和最大的子数组为[6,7],最大和为13。

动态方程

看过题解的都知道,这个题目的动态方程为:

max( dp[ i ] ) = getMax( max( dp[ i -1 ] ) + arr[ i ] ,arr[ i ] )

意思是,以下标为i元素结尾的子串的最大和子串为:上一个这样的结果与arr[i]的和 跟arr[i]当中的最大值。但以我的理解能力才开始没看懂这个方程是怎么来的,也没有理解它的意义何在。
经过分析得出以下结论:

  1. 子数组可能以数组中的任何一个元素结尾。
  2. 以上一个元素结尾的子串和当前的元素是连续的。
  3. 以当前元素结尾的和最大子数组要么加上以上一个元素结尾的最大和子数组,
    要么以本元素作为最大子串。
  4. 可以找到以每个元素结尾的子数组的最大子数组和。

有了以上条件,就可以想到动态规划的原理了:
首先,第一个元素以它本身结尾,它也是一个子串,所以 以这个元素结尾的子串就是它本身,第二个元素要想找到以自身结尾的和最大的子串就得比较:本身 和 与上一个最大子串和的和(因为上一个最大子串是和当前元素连续的,可以直接利用它的结果,如果与上一个最大子串和相加比自身还小,那么以这个元

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值