题目描述
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
1 | 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] |
提示:
1 <= arr.length <= 10^5
-100 <= arr[i] <= 100
思路
动态规划
解析
- 状态定义:设
dp[i]
代表以元素nums[i]
为结尾的连续子数组最大和。 - 转移方程:若
dp[i-1] <= 0
,说明dp[i-1]
对dp[i]
产生负贡献,即dp[i-1] + nums[i]
还不如nums[i]
本身大。当dp[i-1] > 0时,dp[i] = dp[i-1] + nums[i]
当dp[i-1] <= 0时,dp[i] = nums[i]
- 初始状态:
dp[0] = nums[0]
。 - 返回值:dp列表中的最大值。
- 由于
dp[i]
只与dp[i-1]
和nums[i]
有关系,因此将原数组nums用作dp列表。
代码
1 | class Solution{ |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。