Maximum Subarray

题目

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array[-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray[4,-1,2,1]has the largest sum =6.

思路分析

这道题乍一看应该跟two pointers有关系,因为要找的是一个window,这个window中的数字的和最大。但是这道题有自己的特点,因为如果一个数加上一个正整数,那么和就会变大,如果一个数加上一个负数,那么和就会变小。给予这一特点,我们可以总结出以下的几点:

  • 如果array中有正整数,那么和最大的subarray必然是从正整数开始
  • 如果array中没有正整数,那么和最大subarray就是最大的那个负数或0
  • 如果前面的数的和是负数,那么新的和就要从当前的数开始重新计算,因为之前的和加上现在的数一定比当前的数小,这个就相当于left pointer的移动
  • 如果前面的数的和是正数,那么新的和就是前面的数的和加上当前的数

通过上面几点分析,可以得到具体的code实现

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        maxNum = nums[0]
        sumNum = 0
        for num in nums:
            if sumNum < 0: sumNum = num
            else: sumNum += num
            if sumNum > maxNum: maxNum = sumNum
        return maxNum

results matching ""

    No results matching ""