给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
代码:思路
参考:
这个问题首先这样想:
如果全是正数,那么整个数组之和就是最大的。如果全是负数,那么只有一个元素为1的子序而且该元素是最大的负数。
那么可以这样想,序列如果有正有负,加上正数可以使得和变大,加上负数使和最小,那么我们首先要尽可能的找到整数,随后在累加的过程中要保证和始终为正,如果出现负了,说明这个子序列过长了或者不能用了,最优解只有在之前的子序列和新的子序列中寻找了。
class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ """ sum = 0 MaxSum = nums[0] for i in range(len(nums)): sum += nums[i] if sum > MaxSum: MaxSum = sum if sum < 0: sum = 0 return MaxSum """ for i in range(1, len(nums)): if nums[i-1] > 0: nums[i] += nums[i-1] return max(nums)