码迷,mamicode.com
首页 > 其他好文 > 详细

53最大子序和.py

时间:2020-01-22 13:15:57      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:图片   解法   +=   来源   show   alt   pytho   sub   pen   

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

来源:https://leetcode-cn.com/problems/maximum-subarray/solution/

法一:动态规划

思路:关键是要正确的写出状态转移方程.dp[i]表示的是以nums[i]结尾的最大子串和,注意不是nums[i]中的最大子串和,如果是nums[i]中的最大子串和,则状态转移方程较复杂,无法直接写出.

参考:https://leetcode-cn.com/problems/maximum-subarray/solution/dong-tai-gui-hua-jie-fa-4xing-pythondai-ma-by-mcdu/

技术图片
from typing import List
class Solution():
    def maxSubArray(self, nums: List[int]) -> int:
        dp=nums[:]
        for i in range(1,len(nums)):
            dp[i]=max(dp[i-1]+nums[i],nums[i])
        return max(dp)

if __name__ == __main__:
    duixiang = Solution()
    a = duixiang.maxSubArray([-2,1,-3,4,-1,2,1,-5,4])
    print(a)
View Code

法二:官方解法

技术图片
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        n = len(nums)
        max_sum = nums[0]
        for i in range(1, n):
            # 如果前一个数大于0,则加到当前数上,
            if nums[i - 1] > 0:
                nums[i] += nums[i - 1]
            # 否则是小于等于0,求该数与之前和的最大值.
            max_sum = max(nums[i], max_sum)
        return max_sum
View Code

yyy

53最大子序和.py

标签:图片   解法   +=   来源   show   alt   pytho   sub   pen   

原文地址:https://www.cnblogs.com/xxswkl/p/12228288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!