📅  最后修改于: 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