和最大子序列

Posted coolcpp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了和最大子序列相关的知识,希望对你有一定的参考价值。

问题描述

对于一个给定的长度为N的整数序列A,它的“子序列”的定义是:A中非空的一段连续的元素(整数)。你要完成的任务是,在所有可能的子序列中,找到一个子序列,该子序列中所有元素的和是最大的(跟其他所有子序列相比)。程序要求你输出这个最大值。

输入格式

输入文件的第一行包含一个整数N,第二行包含N个整数,表示A。
其中
1 <= N <= 100000
-10000 <= A[i] <=  10000

输出格式

输出仅包含一个整数,表示你算出的答案。

样例输入

5
3 -2 3 -5 4

样例输出

4



实现代码

#include <iostream>
#include <vector>
using namespace std;

int max(int a, int b)
{
    return a > b ? a : b;
}

long maxSubArray(vector<int> nums)
{
    long n_max = nums[0];
    vector<int> arr(nums.size(), 0);
    arr[0] = nums[0];
    
    for(int i = 1; i < nums.size(); i++)
    {
        arr[i] = max(arr[i - 1] + nums[i], nums[i]);
        n_max = arr[i] > n_max ? arr[i] : n_max;
    }
    
    return n_max;
}

int main()
{
    int num, len;
    vector<int> nums(0);
    
    cin >> len;
    for(int i = 0; i < len; ++i)
    {
        cin >> num;
        nums.push_back(num);
    }
    
    cout << maxSubArray(nums) << endl;
    
    return 0;
}





以上是关于和最大子序列的主要内容,如果未能解决你的问题,请参考以下文章

子序列最大和

最大连续子序列问题(tyvj1305)

求连续序列的最大子序列和

dp-最大连续子序列的和

题目1077:最大序列和(最大连续子序列和)

算法小总结最大连续子序列和最大连续子矩阵的关系与实现