您的位置:首页 > 其它

LeetCode-Easy部分中标签为 Dynamic Programming(DP) 53. Maximum Subarray

2017-04-09 22:03 621 查看

原题

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.


题目分析

这个题表面上看能分解为类似

MaxSubArray(int[] nums, int i, int j)


即求nums[i:j]子数组的最大值。再仔细分析后发现,找不到与原问题的契合点。

不妨换思路,
maxSubArray(int[] nums, int i)


dyna[i] = nums[i] + (dyna[i-1]>0 ? dyna[i-1]:0)


max = Max(max, dyna[i])


代码实现

public int MaxSubArray(int[] nums)
{
int n = nums.Length;
int[] dyna = new int
;
dyna[0] = nums[0];
int max = dyna[0];

for (int i = 1; i < n; i++)
{
dyna[i] = nums[i] + (dyna[i - 1] > 0 ? dyna[i - 1] : 0);
max = Math.Max(dyna[i], max);
}

return max;
}


此题更精简的做法:

http://blog.csdn.net/daigualu/article/details/70980526
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: