和最大子序列
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;
}
以上是关于和最大子序列的主要内容,如果未能解决你的问题,请参考以下文章