子数组的最大累加和
Posted nuist__NJUPT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子数组的最大累加和相关的知识,希望对你有一定的参考价值。
子数组的最大累加和
子数组是指元素连续的数组。
输入:
6
1 0 -6 3 -9 2
输出:
3
方法1:暴力破解法
import java.util.Scanner;
public class ArraySum {
public static int force(int [] array){
int res = Integer.MIN_VALUE ;
for(int i=0; i<array.length; i++){
int sum = 0 ;
int max = array[i] ;
for(int j=i+1; j<array.length; j++){
sum += array[j] ;
if(sum >= max){
max = sum ;
}
}
res = Math.max(res, max) ;
}
return res ;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in) ;
int n = input.nextInt() ;
int [] array = new int [n] ;
for(int i=0; i<n; i++){
array[i] = input.nextInt() ;
}
System.out.println(force(array)) ;
}
}
方法2:递推法
思想:前i项和小于0,则丢弃前i项,否则,保留,依次累加求最大。
import java.util.Scanner;
public class ArraySum1 {
public static int max(int [] array){
int sum = 0, max = 0 ;
for(int i=0; i<array.length; i++){
if(sum + array[i] > 0){ //总和 大于0,则保留
sum += array[i] ;
}else{ //否则丢弃array[i]及之前的
sum = 0 ;
}
if(sum >= max){
max = sum ;
}
}
return max ;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in) ;
int n = input.nextInt() ;
int [] array = new int [n] ;
for(int i=0; i<n; i++){
array[i] = input.nextInt() ;
}
System.out.println(max(array)) ;
}
}
以上是关于子数组的最大累加和的主要内容,如果未能解决你的问题,请参考以下文章