输入一组数组,如何输出此数组子序列之和的最大值

方法1:

public class Test {
public static int maxSubSum1(int[] a){
int maxSum=0;int thisSum=0;
for (int i=0;i<a.length;i++){
thisSum+=a[i];
if (thisSum>maxSum)
maxSum=thisSum;
else if (thisSum<0)
thisSum=0;
}
return maxSum;
}

public static void main(String[] args) {
int[] a={4,-3,5,-2,-1,2,6,-2};
int b=maxSubSum1(a);
System.out.println(b);
}
}
解析:i表示当前序列的起点,如果a[i]为负的,那么它不可能代表最优序列的起点,因为任何包含a[i]序列的起点都可以通过用a[i+1]作为起点来改善,如果在内循环检测中发现a[i]-a[j]的子序列都是负的,那么
可以推进i,该算法的复杂度可以达到O(n);
方法2:





















posted @ 2020-04-20 18:13  随心—所欲  阅读(268)  评论(0编辑  收藏  举报