返回子数组的最大累加和【刷题记录】

导读:本篇文章讲解 返回子数组的最大累加和【刷题记录】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、题目描述

给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5 , -2, 6]可以累加出最大的和12,所以返回12.
题目保证没有全为负数的数据
[要求]
1、 时间复杂度为O(n),
2、空间复杂度为O(1)

示例:
输入:[1, -2, 3, 5, -2, 6, -1]
返回值:12

二、解题思路

1、定义一个dp大小为n的数组,其中dp[i]的值代表到第i位的时候,以arr[i]结尾的连续子数组最大累加和。
2、当i =0时,dp[i] = arr[0]
3、当i != 0时, dp[i] = max(0,dp[i-1]) + arr[i](若 dp[i-1] <= 0即为负数时时dp[i-1] + arr[i]还不如arr[i]的本身大,所以当dp[i-1] <= 0时,dp[i-1] = arr[i], 当dn[i-1] >0时,dp[i] = dp[i-1] + arr[i])
4、最后返回值为dp数组中最大的值
在这里插入图片描述

三、解题代码

class Solution:
    def maxsumofSubarray(self , arr ):
        # write code here
        dp = [0] * len(arr)#开辟dp
        res = arr[0]#保存最终的结果
        dp[0] = arr[0]#初始化
        for i in range(1,len(arr)):
            dp[i] = max(dp[i-1],0) + arr[i]#维护dp[i]
            res = max(res,dp[i])#每更新一个dp值就更新一下res
        return res

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99771.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!