同时维护最大最小,全是负数的时候额外考虑一下。
import java.util.*;
public class Main{
public static void main(String []args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int []num=new int[n];
for(int i=0;i<n;i++){
num[i]=input.nextInt();
}
int [][]dp=new int[n][2];
int max=num[0];
int min=num[0];
dp[0][0]=num[0];
dp[0][1]=num[0];
for(int i=1;i<n;i++){
dp[i][0]=Math.max(dp[i-1][0]+num[i],num[i]);
dp[i][1]=Math.min(dp[i-1][1]+num[i],num[i]);
max=Math.max(max,dp[i][0]);
min=Math.min(min,dp[i][1]);
}
int sum=0;
for(int i=0;i<n;i++){
sum+=num[i];
}
if(sum-min==0){
for(int i=0;i<n;i++){
max=Math.max(max,num[i]);
}
System.out.println(max);
}
else{
System.out.println(Math.max(max,sum-min));
}
}
}

京公网安备 11010502036488号