首先给定一个数组,求出其子数组中(子数组必须是原数组中连续的数值组成)最大累加和。
样例:
输入: arr = {1,-2,3,-2,5,6};
输出:12。
方法一:暴力求解
public class Main {
public static void main(String[] args) {
int maxSum = arr[0];
int[] arr ={1,-2,3,-2,5,6};
for(int i = 0; i < arr.length; i++){
int sum = arr[i];
int maxSum1 = sum;
for(int j = i+1; j < arr.length;j++){
sum += arr[j];
if(sum > maxSum1){
maxSum1 = sum;
}
}
if(maxSum1 > maxSum){
maxSum = maxSum1;
}
}
System.out.println(maxSum);
}
}
方法2: 递推法
从数组的0 位开始逐渐累加;若和大于0继续往后累加;若小于0 则将从数组的1位开始继续累加;
public class Main {
public static void main(String[] args) {
int[] arr ={1,-2,3,-2,5,6};
int sum = arr[0];
int max = sum;
for(int i = 1; i < arr.length; i++){
if(sum >= 0){
sum += arr[i];
}else{
sum = arr[i];
}
if(sum > max){
max = sum;
}
}
System.out.println(max);
}
}