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个整数的数组,返回该数组和为最大的子数组
最新推荐文章于 2020-03-26 20:01:33 发布
本文介绍了一个用于寻找数组中最大子数组和的算法实现。通过动态规划方法,该算法能够高效地找出给定整数数组中和最大的连续子数组。
776

被折叠的 条评论
为什么被折叠?



