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.
Follow up:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach(分治算法), which is more subtle.
思路<一>
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum = 0
bigest = nums[0]
if max(nums)<0: #如果所有元素全小于0,直接返回最大值就可以
return max(nums)
for i in nums:
sum += i
if sum<0: #如果计算到某一时刻,元素和小于0,可以全部抛弃,从下一个值开始计算
sum = 0
if sum>bigest: #保存运算过程中最大值
bigest = sum
return bigest
思路<二>看到discussion里的很简洁的一种方法,学习了。
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(1, len(nums)):
if nums[i-1] > 0:
nums[i] += nums[i-1]
return max(nums)