最大子段和,我们需要构造出一个dp数组,其中dp[i]表示以a[i]结尾的最大值,要么为dp[i-1]+a[i],要么为a[i]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int a[]=new int[n];
int flag=0;
for (int i = 0; i < a.length; i++) {
a[i]=scanner.nextInt();
if(a[i]>0) {
flag=1;
}
}
long max=Integer.MIN_VALUE;
long dp[]=new long[n];
dp[0]=a[0];
// 这里的dp[i]表示以a[i]结尾的最大值
for (int i = 1; i < dp.length; i++) {
dp[i]=Math.max(dp[i-1]+a[i], a[i]);
if(dp[i]>max) {
max=dp[i];
}
}
System.out.println(max);
}
}



京公网安备 11010502036488号