您的位置:首页 > 其它

【LeetCode】Maximum Subarray

2014-04-09 15:31 127 查看

参考链接

http://blog.csdn.net/magisu/article/details/14515209

题目描述


Maximum 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
.
click to show more practice.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

题目分析

题目是意思是,找出一个子串,要求子串中数字之和最大。
这是一个经典的动态规划的题目,需要了解以下规律。
max_subarray(A
) = max( max_subarray(A[n-1]), A
, max_subarray(A[n-1)(+)A
 ); 

最大子串和是之前已经遍历过的数字中的最大值max_subarray(A[n-1]),当前值A
,和加上当前值max_subarray(A[n-1)(+)A
这三者之间的最大值。


代码示例

#include
using namespace std;

#if 1
class Solution {
public:
int maxSubArray(int A[], int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int sum = A[0], max = A[0];
for (int i = 1; i < n; i++) {
sum = sum < 0 ? A[i] : sum + A[i];
max = sum > max ? sum : max;
}
return max;
}
};
#elif 1//自己写的,数据大时就会出问题
class Solution {
public:
int maxSubArray(int A[], int n) {
int *sum = new int
;
for(int i = 0;i0;j--)
{
if(i>=j)
{
sum[j]=sum[j-1]+A[i];
if(sum[j] > max_sum) max_sum = sum[j];
}
}
sum[0] = A[i];
if(sum[0] > max_sum) max_sum = sum[0];
/*
printf("%4d:",A[i]);
for(int k = 0;k




推荐学习C++的资料

C++标准函数库
http://download.csdn.net/detail/chinasnowwolf/7108919

在线C++API查询
http://www.cplusplus.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息