题目描述
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解题思路
- 动态规划
- 如果前边值对当前为负增益,舍弃。如果为增益,加上
- 一直记录dp数组中的最大值,遍历完即可得到连续子数组的最大和
- 可以用原数组来维护dp数组
算法复杂度
- 时间复杂度:O(N)
- 空间复杂度:O(1)
代码实现
func maxSubArray(nums []int) int {
if len(nums) <= 0 {
return 0
}
res := nums[0]
for i := 1; i < len(nums); i++ {
if nums[i - 1] > 0 {
nums[i] += nums[i - 1]
}
if nums[i] > res {
res = nums[i]
}
}
return res
}