算法与分析课程_动态规划算法_拼题网_习题1_最大子段和_C++

1 最大子段和
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。

要求算法的时间复杂度为O(n)。

输入格式:
输入有两行:

第一行是n值(1<=n<=10000);

第二行是n个整数。

输出格式:
输出最大子段和。

输入样例:
在这里给出一组输入。例如:

6
-2 11 -4 13 -5 -2

输出样例:
在这里给出相应的输出。例如:

2

代码:
maxSum数组运行结果

012345
182091300
#include
#include
#include
using namespace std;
class Solution {
public:int maxSegment(vector<int>& nums) {vector<int> maxSum(nums.size(),0);if (nums.back() > 0)maxSum.back() = nums.back();elsemaxSum.back() = 0;for (int i = nums.size() - 2; i >= 0; i--) {if (maxSum.at(i + 1) > 0) {maxSum.at(i) = nums.at(i) + maxSum.at(i + 1);}else {if (nums.at(i) <= 0)maxSum.at(i) = 0;elsemaxSum.at(i) = nums.at(i);}}sort(maxSum.begin(), maxSum.end());return maxSum.back();}
};
int main() {int n;cin >> n;vector<int> nums(n,0);for (int i = 0; i < n; i++) {cin >> nums.at(i);}Solution A;cout << A.maxSegment(nums) << endl;system("pause");return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部