开始写了个O(n^2)的算法,超时了
int maxSubArray(int A[], int n) {
int maxSum=0;
for (int i=0; i<n; i++) {
int sum=0;
for (int j=i; j<n; j++) {
sum+=j;
if (sum>maxSum) {
maxSum=sum;
}
}
}
return maxSum;
}
后发现,可以进行进一步的优化
class Solution {
public:
int maxSubArray(int A[], int n) {
int max=A[0];
int sum=A[0];
for(int i=1;i<n;i++){//一次扫描法,从左向右扫描
if(sum<=0){//如果当前的子序列的和<0了,那么当前的子序列肯定不是最大子序列中的一部分,则从当前元素重新扫描。
sum=A[i];
}else{//继续累加
sum+=A[i];
}
if(sum>max){//max保存当前出现过的子序列的最大值,如果>max,则替换max的值
max=sum;
}
}
return max;
}
};