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();
}
}
包含n个整数的数组,返回该数组和为最大的子数组
最新推荐文章于 2022-08-12 12:02:04 发布