弟中弟的Leetcode总结——数组类(七)
题目描述
Maximum Subarray
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
思路
这题是非常典型的动态规划问题。首先要确定状态转移方程。对数组进行遍历,如果当前子序列的和为负数的时候,就需要扔掉这个数列,从当前项开始为第一项,再继续遍历。如果为正数,那么保存当前的和来与目前的最大值进行对比,看是否需要替换。
代码(py3)
class Solution:
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
#初始化一下最大值
ans=-1e10
temp=0
for i in nums:
#计算当前子序列的和
temp+=i
#更新最大值
if(temp>ans):
ans=temp
#子序列和小于0则扔掉
if(temp<0):
temp=0
return ans