LeetCode: Maximum Subarray

来源:互联网 发布:数据库原理视频下载 编辑:程序博客网 时间:2024/06/14 18:59

题目

https://oj.leetcode.com/problems/maximum-subarray/


分析

1. 一开始想用穷举法找出所有的子序列, 并求出最大的和,然后结果是超时了。

2. 后来发现这道题是一道很巧妙的DP题,

首先我们先来求另一个问题, “数组A[]中包含最后一个元素的最大连续子序列的和为多少?”

包含最后一个元素的最大连续子序列的和有两种情况: 

最后一个元素和前面的元素构成一个子序列

或者最后一个元素自成一个子序列。

递归的求包含最后一个元素的最大连续子序列就是  f(n) = max(f(n-1), A[n]);

以此类推, 每个元素为结尾的最大连续子序列的和就求出来了,

3. 在2中, 其中的最大值便是整个数列的最大连续子序列的和。

把上面递归用改写为递归的形式, 就是最终结果了。


代码

class Solution{public:int maxSubArray(int A[], int n){int sum[n], res;sum[0] = A[0];res = sum[0];for (int i = 1; i < n; i++){sum[i] = max(A[i], sum[i-1] + A[i]);res = max(res, sum[i]);}return res;}};


参考

http://blog.csdn.net/v_july_v/article/details/6444021

0 0
原创粉丝点击