LeetCode053 Maximum Subarray

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)

猜你喜欢

转载自blog.csdn.net/AIpush/article/details/81913770