您的位置:首页 > 其它

【LeetCode】53. Maximum Subarray

2017-01-08 10:42 471 查看
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
.

click to show more practice.

Difficulty: Medium

动态规划

另sum[i]表示从i开始的最大子串和,则有递推公式:sum[i] = max{A[i], A[i] + sum[i+1]}

因为递推式只用到了后一项,所以在编码实现的时候可以进行状态压缩,用一个变量即可
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();
int sum = nums[n - 1];
int maxSum = sum;

for (int i = n - 2; i >= 0; i--) {
sum = max(nums[i], sum + nums[i]);
maxSum = max(maxSum, sum);
}

return maxSum;

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