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.
最开始用了两个循环,之后参考了讨论区的解决方案,学习到了Kadane’s Algorithm。优化后代码如下
class Solution:
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
lengh = len(nums)
if lengh == 1:
return nums[0]
maxsum = temp = nums[0]
for i in range(1,lengh):
temp = max(nums[i],temp+nums[i]) #Kadane’s Algorithm maxSum = max(A[i],A[i]+maxSum)
maxsum = max(maxsum,temp)
return maxsum
参考:
http://theoryofprogramming.com/2016/10/21/dynamic-programming-kadanes-algorithm/
https://leetcode.com/problems/maximum-subarray/discuss/20193/DP-solution-and-some-thoughts