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
}

浙公网安备 33010602011771号