美文网首页
53. 最大子序和

53. 最大子序和

作者: Chiduru | 来源:发表于2020-02-25 23:47 被阅读0次

    【Description】

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    示例:

    输入: [-2,1,-3,4,-1,2,1,-5,4],
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

    【Idea】
    ①贪心
    借用两个int变量tpSum和maxSum存储。
    从左向右遍历该数组。每当右移一位,将tpSum与当前元素大小比较,如果大于当前元素,则tpSum更新值,并拿更新后的tpSum继续向前求和比较。若和小于当前元素,表明局部最优解已结束。更新maxSum=max(tpSum,maxSum),更新tpSum=nums[i]
    tips:这个题我是在动态规划里刷到的。但是贪心求解的话与动态规划有些矛盾的地方,分类私以为有些不妥。

    【Solution】

    # ①贪心求解
    class Solution:
        def maxSubArray(self, nums: List[int]) -> int:
            length = len(nums)
            if length == 1:
                return nums[0]
            maxSum = nums[0]
            i = 1
            tp = nums[0]
            while i < length:
                if nums[i] >= nums[i] + tp:
                    tp = nums[i]
                else:
                    tp = nums[i] + tp
                maxSum = max(tp, maxSum)
                # print(i, tp, maxSum)
                i += 1
            return maxSum
    
    image.png

    相关文章

      网友评论

          本文标题:53. 最大子序和

          本文链接:https://www.haomeiwen.com/subject/qjlkchtx.html