LeetCode-53 最大子序和
LeetCode-53 最大子序和
1.暴力求解
遍历数组。分别求出每个子序列的和,再求最大值。
Time Limit Exceeded
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
max=-float('inf')
for i in range(len(nums)):
sum=0
for j in range(i,len(nums)):
sum+=nums[j]
if sum>max:
max=sum
return max
2. 动态规划
对于元素i,,以i为结尾的最大子序和,只取决于前(i-1)个元素中,以[i-1]号元素为结尾的最大子序和
对于前i-1个元素的子序和,存在两种情况
-
前i-1个元素最大子序和大于0,则前i个元素的最大子序等于 前i-1元素最大子序和+当前元素
-
前i-1个元素最大子序和小于0,则前i个元素的最大子序等于 元素
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
sum_n_1=nums[0]
sum=nums[0]
for i in range(1,len(nums)):
if sum_n_1>0:
sum_n_1+=nums[i]
else:
sum_n_1=nums[i]
if sum_n_1>sum:
sum=sum_n_1
return sum