问题:
题目来源:力扣(LeetCode)
难度:简单
分析:
可以用DP和分治做。
在本题中分治的做法更复杂、时间更长,但在某些背景下却被认为是更优的做法。这是为什么呢?
因为分治法不仅可以解决区间[0, n - 1]的问题,还可以解决任意区间
[l, r]的问题。如果在计算过程中将结果用堆都存储下来。那么就可在O(logn)的时间内求取任意时间的答案。
解决方法:
1:常规思路
用两个值记录遍历过程中的结果,不断求取最大值。
无论是常规思路还是DP,遵循的一个原则是:当某元素之前的子序和小于等于0的时候,那么前面的子序和对子序和的增加没有贡献,前述子序结束,当前子序重新开始。
#DP,常规思路
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
sum_temp = 0
sum_max = nums[0]
for i in range(len(nums)):
if sum_temp >= 0:
sum_temp += nums[i]
else:
sum_temp = nums[i