class Solution:
def maxSum(self,nums:List[int],m :int ,w :int)->int:
n = len(nums)
dp = [[-inf] * (n + 1) for _ in range(m + 1)]
preSum = [0] * (n + 1)
for i in range(n):
preSum[i + 1] = preSum[i] + nums[i]
dp[0] = [0] * (n + 1)
for i in range(1,m + 1):
l = i * w
r = n - (m - i) * w + 1
mx = -inf
for j in range(l, r):
# todo 记住 最重要的转换 多次出现
mx = max(mx,dp[i-1][j - w] - preSum[j - w])
dp[i][j] = max(dp[i][j-1],mx + preSum[j] )
return dp[m][n]
关于#lc-3473#的问题,请各位专家解答!
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
阿里嘎多学长 2025-03-10 14:04关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
问题解答
问题是 LeetCode 3473 题,要求实现一个函数
maxSum,计算一个数组nums中的最大子数组和,子数组的长度不能超过w。代码中已经定义了
maxSum函数,但是还没有实现。下面是解决方案:class Solution: def maxSum(self, nums: List[int], w: int, n: int) -> int: m = len(nums) dp = [0] * (w + 1) for i in range(m): for j in range(w, 0, -1): dp[j] = max(dp[j], dp[j - 1] + nums[i]) return max(dp)解释:使用动态规划(DP)解决问题。创建一个数组
dp,其中dp[j]表示以j为结尾的最大子数组和。遍历数组nums,对于每个元素,更新dp数组,以确保dp[j]是以j为结尾的最大子数组和。最后返回dp数组中的最大值。注意:代码中使用了 Python 语言,LeetCode 3473 题的输入参数是
nums数组、w子数组的长度和n数组的长度。解决 无用评论 打赏 举报