子数组的最大累加和

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)) ;
    }
}

以上是关于子数组的最大累加和的主要内容,如果未能解决你的问题,请参考以下文章

子数组的最大累加和

课堂练习----一个整数数组中最大子数组的和

算法总结之 子矩阵的最大累加和问题

数组中累加和为k的最大子数组的长度

2021-06-15:返回一个二维数组中,子矩阵最大累加和。

子矩阵最大累加和