- leet_code:链接
- 问题描述:给定一个数组nums,查找其邻接子数组(子数组元素最少为1个)中元素和最大的子数组。
- 输入输出样例:
- Input: [-2,1,-3,4,-1,2,1,-5,4],
- Output: 6
- Explanation: [4,-1,2,1] has the largest sum = 6.
- 思路:典型的(DP)动态规划问题。将问题划分为重叠的子问题,求解和保存各子问题的解,得到最终原问题的解。
- c++ 代码:
#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>
class Solution
{
public:
int maxSubarray(vector<int> data)
{
int len = data.size(), max_sum = INT_MIN;
int* sub_sum = new int[len];
sub_sum[0] = data[0];
for (int i = 1; i < len; i++)
{
sub_sum[i] = data[i] + (sub_sum[i - 1] > 0 ? sub_sum[i - 1] : 0);
max_sum = max(max_sum, sub_sum[i]);
}
return max_sum;
}
};
int main(int argc, char*argv[])
{
vector<int> data = { -2,1,-3,4,-1,2,1,-5,4 };
Solution solution;
cout << solution.maxSubarray(data) << endl;
system("pause");
return 0;
}