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

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

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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @return int整型一维数组
 */
export function FindGreatestSumOfSubArray(array: number[]): number[] {
    //1. 动态规划来确定dp为连续子元素之和,i为元素,状态转移方程为dp[i] = Math.max(dp[i-1] + array[i],array[i])
    //2. 然后控制范围,滑动范围,分情况来进行滑动这个区间
    const dp = []
    dp[0] = array[0]
    let maxsum  = array[0]
    let left = 0,right = 0//滑动的范围
    let resl = 0,resr = 0//最长的区间范围
    for(let i = 1;i < array.length;i++){
        right++
        dp[i] = Math.max(dp[i-1]+array[i],array[i])
        //控制范围,更新左边的范围
        if(dp[i-1]+array[i] < array[i]){
            left = right
        }
        //更新最大值:当前的连续子数组大于最大的值
        if(dp[i] > maxsum || dp[i] === maxsum && (right - left + 1) > (resr - resl + 1)){
            maxsum = dp[i]
            resl = left
            resr = right
        }
    }
    //找到区间了,取值
    return array.slice(resl,resr+1)
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-11-28 17:59
字节跳动 后端工程师 30k ✖️ 15 硕士985
汉献帝刘协:谢谢楼主 过年回去该催催我爸奋斗了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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