题解 | #连续子数组的最大和(二)#

连续子数组的最大和(二)

https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21

import java.util.*;
public class Solution {
    public int[] FindGreatestSumOfSubArray (int[] array) {
        //记录到下标i为止的最大连续子数组和的最大值
        int[] dp = new int[array.length];
        dp[0] = array[0];
        int maxsum = dp[0];
        //滑动区间
        int pre = 0;//左边是pre,右边是i,即当前的位置
        //记录最长的区间
        int resLeft = 0, resRight = 0;
        for (int i = 1; i < array.length; i++) {
            //状态转移:连续子数组和最大值
            dp[i] = Math.max(dp[i - 1] + array[i], array[i]);

            //区间新起点
            if (dp[i - 1] + array[i] < array[i])
                pre = i;
            
            
            //更新最大值
            if (dp[i] > maxsum || dp[i] == maxsum &&
                    (i -pre + 1) >= (resRight - resLeft + 1)) {
                maxsum = dp[i];
                resLeft = pre;
                resRight = i;
            }


        }
        //取数组
        int[] res = new int[resRight - resLeft + 1];
        for (int i = resLeft; i <= resRight; i++)
            res[i - resLeft] = array[i];
        return res;
    }
}

全部评论

相关推荐

水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
机械打工仔:有说的你怀疑一下就行了,直接问也太实诚了
点赞 评论 收藏
分享
码农索隆:7*24,随时待命,这是去🇷🇺打仗去了啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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