Problem P10. [算法课动态规划]连续数组最大和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
输入
输入数组长度n (1<=n<=50) 依次给数组的元素赋值
输出
输出所有子数组的和的最大值
样例
标准输入复制文本 |
9 -2 1 -3 4 -1 2 1 -5 4 |
标准输出复制文本 |
6 |
提示
只需要求出每个位置的连续子数组的最大和,然后返回数组中的最大值即可
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int max_subarray_sum(vector<int>& nums) {
if (nums.empty()) {
return 0;
}
int maxSum = INT_MIN;
int currentSum = 0;
for (int i = 0; i < nums.size(); i++) {
currentSum += nums[i];
if (currentSum > maxSum) {
maxSum = currentSum;
}
if (currentSum < 0) {
currentSum = 0;
}
}
return maxSum;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
cout << max_subarray_sum(nums) << endl;
return 0;
}