很经典的题目,当然以前做过,
这是我写的代码,好像不够简洁,后面给个更简洁的:
class Solution {
public:
int maxSubArray(int A[], int n) {
int flag=INT_MIN;
int sum=0;
int Max=0;
for(int i=0;i<n;i++){
flag=max(flag,A[i]);
sum+=A[i];
Max=max(sum,Max);
if(sum<0)
sum=0;
}
if(flag>=0)
return Max;
else
return flag;
}
};
最简洁的DP:
原理:
如果之前的连续和对于当前没有贡献,则抛弃前面的值:
class Solution {
public:
int maxSubArray(int A[], int n) {
int sum=0;
int Max=INT_MIN;
for(int i=0;i<n;i++){
sum=max(sum+A[i],A[i]);
Max=max(Max,sum);
}
return Max;
}
};