【算法】最大子序和:贪心算法 & 动态规划

解法一 贪心算法:

  1. 变量 cur_sum 存储当前的和,max_sum 存储最大的和
  2. 如果 cur_sum 为负,则遍历下一个元素时,丢掉cur_sum,cur_sum为下一个元素的值。
  3. 时间复杂度:O(n),其中 n 为 nums 数组的长度。我们只需要遍历一遍数组即可求得答案。
  4. 空间复杂度:O(1)。我们只需要常数空间存放若干变量。
def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max_sum = None
        last_sum = None
        cur_sum = None

        for i in nums:
            if max_sum == None:
                max_sum = i
                cur_sum = i
            else:
                if cur_sum < 0:
                    cur_sum = i
                else:
                    cur_sum = cur_sum + i
                if cur_sum>max_sum:
                    max_sum = cur_sum
        return max_sum

解法二 动态规划:

  1.  遍历数组,如果前一项>0,则当前项=前一项+当前项
  2.  取当前数组的最大值
  3.  时间复杂度:O(n)
  4.  空间复杂度:O(1)
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]+nums[i-1]
        
        return max(nums)

 

posted @ 2020-12-07 15:56  刘玉璇  阅读(213)  评论(0编辑  收藏  举报