给定一个数组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 ,判断所有扫描过的 序列和。找出最大值
本文介绍了一种求解数组中子数组最大累加和的高效算法,通过对比两种不同实现方式,一种是简单的暴力搜索,另一种是优化后的算法,后者通过避免重复计算大大提升了效率。
5747

被折叠的 条评论
为什么被折叠?



