题目描述
给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
思路
定义两个变量,cur_sum存放当前累加的和,max_sum存放最大的子序和,遍历数组,累加元素。
当遍历到第i个元素时:
如果前面累加的和加上该元素结果小于该元素,说明前面累加的和对第i个元素来说是负效益的,那么前面累加的和应该清零,从第i个元素开始累加;
如果前面累加的和加上该元素结果大于或等于该元素,说明前面累加的和对第i个元素来说是正效益的,那么可以继续累加。
每遍历完一个元素,比较一下最大值,记录最大子序和。
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
cur_sum, max_sum = 0, nums[0]
for i in nums:
cur_sum = max(cur_sum+i, i)
max_sum = max(max_sum, cur_sum)
return max_sum