动态规划----Maximun Subarray

来源:互联网 发布:奥尔弗斯 知乎 编辑:程序博客网 时间:2024/06/05 04:10

问题描述:

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.

动态规划描述:



方法一:


源代码:
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  2Aug 25 2016  11:45:50请按任意键继续. . .




0 0