动态规划----Maximun Subarray

问题描述:

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值