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

连续子数组最大和

https://www.nowcoder.com/practice/1718131e719746e9a56fb29c40cc8f95

对于这个问题 思路是 考虑每个数作为结尾的情况的最大连续子数组和

比较当前数加上前面最大的连续子数组和与当前数自己作为新的子数组和的开头谁大

preSum 是用来记录当前下标前一个的最大连续子数组和

如果arr[i] > arr[i]+preSum 说明 preSum带来的是负作用 我们舍弃它 只用arr[i] 作为新开头

反之,说明preSum带来的是正作用 我们就更新preSum

在这个同时 我们维护一个全局变量ans 记录答案

最后返回ans

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for(int i = 0;i<n;i++){
            arr[i] = sc.nextInt();
        }
        int ans = Integer.MIN_VALUE;
        int preSum = 0;
        for(int i = 0;i<n;i++){
            preSum = Math.max(arr[i],arr[i]+preSum);
            ans = Math.max(ans,preSum);
        }
        System.out.println(ans);
    }
}

全部评论

相关推荐

在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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