题解 | #环形数组连续最大和#

环形数组的连续子数组最大和

http://www.nowcoder.com/practice/53a9f1ba687440cc9c641c2b042a59d7

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


全部评论
sum - min = 0 时, 直接输出 max 就好了, 不需要再遍历数组寻找了
点赞 回复 分享
发布于 2022-12-29 22:00 广东

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务