您的位置:首页 > 其它

DP-Maximum Subarray

2015-11-16 22:53 134 查看
问题描述:

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
.

思路:

定义f(i)为array[0...i]的最大子数组。

状态转移方程:

f(i) = i;       f(i - 1) <= 0

f(i) = f(i-1) + i;   f(i - 1) > 0

解决:

class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxSum = nums[0];
for (int i = 1; i < (nums.size()); i++)
{
if (nums[i-1] <= 0)
nums[i] = nums[i];
else
nums[i] = nums[i-1] + nums[i];
maxSum = max(maxSum, nums[i]);
}

return maxSum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: