Q:
给定整数A1,A2,A3.....An,求Aj-Ak相加的最大值
A:
public class MaxSub {
public static void main(String[] args){
int[] a = {-2,11,-4,13,-5,-2};
System.out.println(method(a));
}
public static int method(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;
}
}
这个算法是从数据结构与算法分析上抄来的,非常感叹她的精巧。
这个算法的核心思想:只要前面相加的数列不是负数就不会影响往后相加的最大值。
简直是算法精简的模范了。。。活活精简到O(n)