JZ30-连续子数组的最大和

连续子数组的最大和

https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        if (array == null || array.length == 0) {
            return -1;
        }
        int len = array.length;
        int[] dp = new int[len];

        int max = array[0];
        dp[0] = array[0];

        for (int i = 1; i < len; i++) {
            dp[i] = Math.max(array[i], dp[i - 1] + array[i]); //如果a[i]更大,就直接舍弃之前的数列,重新开始新的一段。
            max = Math.max(dp[i], max); //然后记录每一段的最大值
        }
        return max;
    }
}

class Solution2 {
    public int FindGreatestSumOfSubArray(int[] array) {
        if (array == null || array.length == 0) {
            return -1;
        }

        int max = Integer.MIN_VALUE;
        int sum = 0;
        for (int val : array) {
            if (sum <= 0) { //val+一个负数会更小,所有选较大的val//重新开一段
                sum = val;
            } else {  //val+ 一个正数会更大,所有选较大的val + sum
                sum = val + sum;
            }
            max = Math.max(sum, max); //记录当前最大值。相当于swap了。
        }
        return max;
    }
}

全部评论

相关推荐

狸猫换offer:神通广大的互联网
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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