1. 题源:牛课网,题号:OR176 连续子数组最大和
题目:输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。
思路:
- 动态规划最简单的方法就是依次列举给出当前数组的几个元素,从后往前推理出数组与当前元素和结果数组的关系。
- 当前数组:[a1,a2,a3,a4,a5]
- 结果数组:[maxsum1, maxsum2, maxsum3, maxsum4, maxsum5]
- 列出简单地几个元素:[a1,a2,a3]
- 从后往前推理找到当前结点与结果数组的前面若干结点的关系。
- suma3如何求呢? : 可能的组合情况情况: [a1, a2, a3] [a2 ,a3] [a3] , 如果 suma2 < 0, 那么sum = a3 ; 如果 suma2 >= 0 那么sum =sum + a3。其中:suma2就是比较[a1, a2]和[a2]比较谁大
- 那么suma2如何求呢? sum2 : 可能情况:[a1, a2] [a2] 如果suma1<0, 那么 sum = a2; 如果suma1>=0, 那么sum=sum + a2
- 那么suma2如何求呢? sum1就是a1