栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

连续子数组的最大值-C++-牛客BM72

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

连续子数组的最大值-C++-牛客BM72

一、题目

输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。

数据范围: 1<=n<=2×10^5

−100<=a[i]<=100

要求:时间复杂度为 O(n),空间复杂度为 O(n)

进阶:时间复杂度为 O(n),空间复杂度为 O(1)

示例1

输入:[1,-2,3,10,-4,7,2,-5]

返回值:18

说明:经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18

二、思路

设置一个当前连续序列的和cursum,表示当前一个连续子序列的和。从前向后遍历数组,将cursum加上当前位置的数据,如果cursum的值大于ans的值(ans记录出现过的最大连续序列的和),就用cursum的值更新ans的值,如果cursum的值小于0,则将cursum重新置0,并从下一个位置开始重新计算连续子序列的和(因为当前和为小于0,加上后面的只会变小,不会变大,所以重新开始计算)。

三、代码
class Solution {
public:
    int FindGreatestSumOfSubArray(vector array) {
        int ans = array[0], cursum = 0;
        int len = array.size();
        for(int i=0; i ans) ans = cursum;
            if(cursum <= 0) cursum = 0;
        }
        return ans;
    }
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857478.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号