来源:算法导论第三版38页
上次我用分治的方法
时间复杂度为O(N*logN)
这次换成时间复杂度为O(N)的在线处理
#include <stdio.h>
using namespace std;
#include<iostream>
int findmax(int a[],int n){
int max_sum=0,now_sum=0;
for(int i=0;i<n;i++){
now_sum+=a[i];//向右累加
if(now_sum>max_sum)
max_sum=now_sum;//发现更大的数则更新当前结果
else if(now_sum<0)//如果子数组为负
now_sum=0;//则不可能使后面的部分和增大,抛弃
}
return max_sum;
}
int main(){
int a[16]={13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};
int answer=findmax(a,15);
cout<<answer;
return 0;
}