【问题描述】数组X中含有n个元素,找到这个数组中的最大子数组x[l,r]
【输入形式】12
1,-2,4,5,-2,8,3,-2,6,3,7,-1
【输出形式】x[3,10]=16
【题目解析】所谓子数组,就是数组中连续的一段序列;
例如:x[1,3]就是x[1]+x[2]+x[3]=1+(-2)+4=3;
x[3,7]就是x[3]+x[4]+x[5]+x[6]+x[7]=4+5+(-2)+8+3=18;
当然,x[1,10]也是数组x的一个包含了全部元素的子数组。
那么,究竟哪些连续元素组合在一起将会构成最大子数组呢,这里我们采用动态规划思路,自底向上来分析解决此问题。为了方便理解,数组中我们从下标1开始存取。即x[1]=1,是数组中的第一个元素。采用自底向上方法我们可以理解为是倒着来思考问题的,将原来的由1~n考虑问题变为由n~1来考虑。
【核心思路】:这里我们需要理解俩个定义:
1.D[i]表示开头为x[i]的最大子数组的和。
2.Rec[i]记录最大子数组结尾元素的下标。
由于采用自底向上方式,则最初考虑的便是开头为x[n]的最大子数组D[n]:
由于,最后一项x[n]只有一个元素,则D[n]=x[n]