求连续子数组的最大和问题
代码不重要!重要的是思想过程(括弧 好难啊!!!)
输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},输出连续子数组的最大和是18。
| 步骤 | 操作 | 累加的子数组和 | 最大的子数组和 | 
|---|---|---|---|
| 1 | +1 | 1 | 1 | 
| 2 | -2 | -1 | 1 | 
| 3 | 抛弃前面的(+1 - 2 ) ,加3 | 3 | 3 | 
| 4 | +10 | 13 | 13 | 
| 5 | -4 | 9 | 13 | 
| 6 | +7 | 16 | 16 | 
| 7 | +2 | 18 | 18 | 
| 8 | -5 | 13 | 18 | 
动态规划:
- f(i)表示第i个数字结尾的子数组的最大和
- 求max[f(i)]
- 当第 i-1 个数字结尾的子数组中所有数字的和小于0时,如果把这个数再和下一个数字相加,那么求出的和,反而比下一个数字本身还小了,所以就从第i个数字作为起点开始计算
- 如果第i-1个数字和下一个数字和大于0,那么就相加。
递归公式:
 f(i)={pData,i=0或者f(i−1)≤0f(i−1)+pData[i],i!=0并且f(i−1)>0f(i)=\begin{cases} pData,         i = 0 或者f(i-1)\leq 0\\ f(i-1) + pData[i],     i != 0 并且 f(i-1)>0 \end{cases} f(i)={pData,         i=0或者f(i−1)≤0f(i−1)+pData[i],    i!=0并且f(i−1)>0