JZ30 连续子数组的最大和
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).
思路:
动态规划,设动态规划列表 dp,dp[i] 代表以元素 array[i] 为结尾的连续子数组最大和。
状态转移方程: dp[i] = Math.max(dp[i-1]+array[i], array[i]);
具体思路如下:
1.遍历数组,比较 dp[i-1] + array[i] 和 array[i]的大小;
2.为了保证子数组的和最大,每次比较 sum 都取两者的最大值;
3.用max变量记录计算过程中产生的最大的连续和dp[i];
func FindGreatestSumOfSubArray( array []int ) int { // write code here if len(array) == 0 { return 0 } maxSum := array[0] curSum := array[0] for i := 1; i < len(array);i++ { if curSum < 0 { curSum = array[i] } else { curSum += array[i] } if curSum > maxSum { maxSum = curSum } } return maxSum }