[LeetCode]53. Maximum Subarray

53. Maximum Subarray

题意:计算最大的连续子数组之和

动态规划

dp[i]表示为从当前下标i开始的最大子数组之和。

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:
            return 0
        dp = [0] * len(nums)
        max_sum = dp[0] = nums[0]
        for i in range(1, len(nums)):
            dp[i] = nums[i] if dp[i-1] + nums[i] < 0 else max(dp[i-1] + nums[i], nums[i])
            if max_sum < dp[i]:
                max_sum = dp[i]
        return max_sum

还可以在上一步的基础之上进行优化,因为我们每次只是使用到了动态规划的最后一个值进行比较,所以只需要一个变量来维护即可。

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:
            return 0
        max_sum = cur_sum = nums[0]
        for i in range(1, len(nums)):
            cur_sum = max(cur_sum + nums[i], nums[i])
            max_sum = max(cur_sum, max_sum)
        return max_sum
posted @ 2017-08-23 12:17  banananana  阅读(90)  评论(0)    收藏  举报