📌  相关文章
📜  删除至少一个元素后,最大化最大子数组总和(1)

📅  最后修改于: 2023-12-03 14:50:20.912000             🧑  作者: Mango

删除至少一个元素后,最大化最大子数组总和

有一个长度为n的整数数组nums,你需要找到一个连续的子数组,使得删除该子数组中至少一个元素后,剩余元素的总和最大。

解题思路

问题可以简化为找到一个子数组,使其总和最大,然后在遍历该子数组时,尝试删除其中的每个元素,并计算删除后的总和,最终返回删除某个元素后,剩余子数组总和的最大值。

可以通过动态规划的方法来解决该问题。设计一个数组dp,其中dp[i]表示以第i个元素结尾的最大子数组总和,包括第i个元素。则有以下递推公式:

dp[i] = max(dp[i-1] + nums[i], nums[i])

最后,遍历dp数组,找到最大值即为所求。

代码实现:

def maxSubArray(nums: List[int]) -> int:
    n = len(nums)
    if n == 1:
        return nums[0]

    dp = [0] * n
    dp[0] = nums[0]
    res = nums[0]

    for i in range(1, n):
        dp[i] = max(dp[i-1] + nums[i], nums[i])
        res = max(res, dp[i])

    for i in range(1, n-1):
        res = max(res, dp[i-1] + dp[i+1])

    return res
参考链接