题目:
思想:
贪心算法:因为负数只会拉低总和,所以当和为负数时应该立即放弃,从下一个元素开始计算当前和。
解答:
方法一:
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n=len(nums)
cursum=0
maxsum=nums[0]
for i in range(n):
cursum+=nums[i]
if cursum>maxsum:
maxsum=cursum
if cursum<0:
cursum=0
return maxsum
方法二:
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n=len(nums)
cursum=nums[0]
maxsum=cursum
if n==1:
return cursum
for i in range(1,n):
if cursum<=0:
cursum=nums[i]
else:
cursum+=nums[i]
if cursum>maxsum:
maxsum=cursum
return maxsum
方法三:动态规划
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
#dp[i]:以下标i结尾的最大连续子序列和
res=0
n=len(nums)
dp=[0]*n
dp[0]=nums[0]
res=nums[0]
for i in range(1,n):
dp[i]=max(dp[i-1]+nums[i],nums[i])
if dp[i]>res:
res=dp[i]
return res