给定一个数组arr,返回所有子数组的累加和中,最大的累加和
一、简单办法。暴力遍历所有位置选出最大和
三层循环
public static int getArrayMaxNum(int[] arr){
int max = Integer.MIN_VALUE;
for(int i=0;i<arr.length;i++){
for(int j=i;j<arr.length;j++){
int num = 0;
for(int k=i;k<=j;k++){
num += arr[k];
}
max = Math.max(max,num);
}
}
return max;
}
二、
public static int getArrayMaxNum2(int[] arr){
if (arr == null || arr.length == 0) {
return 0;
}
int cur = 0;
int max = Integer.MIN_VALUE;
for(int i=0;i<arr.length;i++){
cur += arr[i];
max = Math.max(max, cur);
if(cur<0){
cur = 0;
}
}
return max;
}
原理:
cur 代表的是 子序列的前缀序列。
一个结果和最大的子序列,,,绝不可能与一个前缀为负数的序列相加。(哪样会变小)
max ,判断所有扫描过的 序列和。找出最大值