包含n个整数的数组,返回该数组和为最大的子数组

来源:互联网 发布:南传上座部 知乎 编辑:程序博客网 时间:2024/05/22 06:18
package edu.ccnu;import java.util.Scanner;import java.util.Scanner;/** * 给定一个包含n个整数的数组,返回该数组和为最大的子数组(元素连续) * @author MLee * */public class MaxSumOfSubarray {    public static int getMaxSum(int[] arr){        if(arr == null){            return Integer.MIN_VALUE;        }        if(arr.length == 0){            return Integer.MIN_VALUE;        }        int[] dp = new int[arr.length];        dp[0] = arr[0]; // dp[i]表示以arr[0:i]为数组的子数组的最大和        int sum = arr[0]; // 反应当前arr[0,i]的正负情况        for(int i = 1; i < arr.length; i++){            if(sum < 0){ // 如果当前sum为负数,则前面的序列就不会再与后面的序列形成子数组了                sum = 0;            }            sum += arr[i];            dp[i] = Math.max(dp[i-1], sum);        }        return dp[arr.length-1];    }    public static void main(String[] args){        Scanner sc = new Scanner(System.in);        System.out.print("> ");        int n = sc.nextInt();        int[] arr = new int[n];        System.out.print("> ");        for(int i = 0; i < arr.length; i++){            arr[i] = sc.nextInt();        }        System.out.println(getMaxSum(arr));        sc.close();    }}
阅读全文
0 0
原创粉丝点击