问题描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,1] has the largest sum = 6.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,1] has the largest sum = 6.
动态规划描述:
方法一:
源代码:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT_MIN, f = 0;
for(int i=0; i<nums.size(); ++i){
f = max(f+nums[i], nums[i]);
result = max(result, f);
}
return result;
}
};
方法二:
源代码:输出结果和所选的值:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int maxSubArray(int *arr, int n, vector<int> &path)
{
int result = INT_MIN, f = 0;
vector<int> vec;
for (int i = 0; i < n; ++i)
{
int a = f + arr[i];
if (a>=arr[i])
{
f = a;
vec.push_back(arr[i]);
}
else
{
vec.clear();
path.clear();
vec.push_back(arr[i]);
f = arr[i];
}
if (result < f)
{
result = f;
for (auto const &t : vec)
path.push_back(t);
vec.clear();
}
}
return result;
}
int main()
{
int arr[] = { 1, -2, 3, 10, -4, 7, 2, -5 };
vector<int> path;
cout << "Max is " << maxSubArray(arr, sizeof(arr) / sizeof(int), path) << endl;
cout << "数字分别为:";
for (auto it = path.begin(); it != path.end(); ++it)
cout << *it << " ";
cout << endl;
cout << __DATE__ << " " << __TIME__ << endl;
system("pause");
return 0;
}
Max is 18
数字分别为:3 10 -4 7 2
Aug 25 2016 11:45:50
请按任意键继续. . .