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

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

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

public class Main{
    private static int fun(int[] nums,int n){
        int[] maxs=new int[nums.length];    //记录当前下标时子序列最大和
        int[] mins=new int[nums.length];    //记录当前下标时子序列最小和
        int max=nums[0];int min=nums[0];    //max为不使用环形数组下最大和
        maxs[0]=nums[0];mins[0]=nums[0];
        for(int i=1;i<nums.length;i++){
            maxs[i]=Math.max(maxs[i-1]+nums[i],nums[i]);
            mins[i]=Math.min(mins[i-1]+nums[i],nums[i]);
            max=Math.max(max,maxs[i]);
            min=Math.min(min,mins[i]);
        }
        int sum=0;
        for(int i=0;i<nums.length;i++){
            sum+=nums[i];
        }
        //sum-min使用环型数组最大和的情况下的最大和
        if(sum-min==0){   //nums全为负数得到情况
            return max;
        }else{
            return Math.max((sum-min),max);
        }
    }
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int[] nums=new int[sc.nextInt()];
        for(int i=0;i<nums.length;i++){
            nums[i]=sc.nextInt();
        }
        System.out.println(fun(nums,nums.length));
    }
}

全部评论

相关推荐

03-29 17:05
门头沟学院 Java
asdasdasda...:我前段时间找工作焦虑,有几天连续熬夜熬穿了,然后心脏突然不舒服,立马躺床上睡觉了,然后第二天还是不舒服,去看医生说是心率不齐,吓得我后面天天早早睡觉,调养身体,过了好几天才好过来。所以真的,工作这些东西哪有那么重要,最多钱多一点钱少一点,降低物欲。活着才是最重要的,现在想想真的后怕
如何排解工作中的焦虑
点赞 评论 收藏
分享
05-10 16:48
门头沟学院 Java
程序员小白条:主要原因,投递太晚了,快手应该早点溜了,你都从去年9月开始的,半年也差不多3月跑路了,这样的话,至少有5个以上的面试机会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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