zoukankan      html  css  js  c++  java
  • 53最大子序和.py

    题目:给定一个整数数组 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

  • 相关阅读:
    33选6算法:M个数N个为一组,无重复的排列组合
    文件墙 CFilewall
    公司代码阅读笔记 记于 2013-09-23
    简单的同步MSMQ
    Markdown 使用说明
    Freezable 对象(WPF)
    AngularJS-入门篇
    第二节Unity3D开发环境安装(windows系统)
    第一节Unity3D简介
    数据库出现可疑解决办法
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12228288.html
Copyright © 2011-2022 走看看