29、连续子数组的最大和

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daaikuaichuan/article/details/85527424

题目描述:

  输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。

解题思路:

  用f[i]表示以i为结尾的连续最大和,如果以i-1为结尾的连续最大和(f[i-1])加上当前数(a[i])还没有当前数(a[i])大,那么以i为结尾的连续最大和就是自己。
在这里插入图片描述

Demo:

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        // vec[i]表示以i结尾的最大和
        vector<int> vec;
        vec.push_back(array[0]);
        int sz = array.size();
        for (int i = 1; i < sz; ++i)
        {
            vec.push_back(max(vec[i-1] + array[i], array[i]));
        }
        return *max_element(vec.begin(), vec.end());
    }
};

猜你喜欢

转载自blog.csdn.net/daaikuaichuan/article/details/85527424
今日推荐