同时维护最大最小,全是负数的时候额外考虑一下。
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));
        }
    }
}