已知给定序列A1,A2,A3……An,求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大
public static int maxSub(int[] sequeuece){
int max=0;
int n=sequeuece.length;
int sum=0;
for(int i:sequeuece){
sum+=i;
if(sum>max){
max=sum;
}
if(sum<0){
sum=0;
}
}
return max;
}
此算法时间复杂度为O(n),整个算法只对数组进行一次扫描即可完成操作。从左到右扫描过程中记录当前子序列的和sum,如果和不断增加,则sum和max不断更新;如果遇到sum为负,sum减小,max不更新。如果sum为负数,则可以抛弃(因为往右进行加法时,会导致右侧和减少),