输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
提示:
1 <= arr.length <= 10^5
-100 <= arr[i] <= 100
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
if len(nums) == 0:
return -2147483648
dps = [0] * len(nums)
dps[0] = nums[0]
# 从索引为1的位置开始
self.dp(nums, 1, dps)
# 遍历dps,得到最大子数组的和
return max(dps)
def dp(self, nums,i, dps):
if i >= len(nums):
return None
# 下面就是转移方程
# 当前位置是否添加前边的子串值,是根据前边字串是否大于0决定,如果大于0则相加,否则则舍弃
# dps中没个元素存储的值是,到当前位置为止,字串最大的和是多少
if dps[i - 1] > 0:
dps[i] = nums[i] + dps[i -1]
else:
dps[i] = nums[i]
return self.dp( nums, i+1,dps)