class Solution:
def constrainedSubsetSum(self, nums: List[int], k: int) -> int:
n = len(nums)
q = list()
dp = [0] * n
dp[0] = nums[0]
q.append(0)
for i in range(1, n):
while q[0] + k < i:
q.pop(0)
sum =max( + dp[q[0]],0) + nums[i]
while q and sum >= dp[q[-1]]:
q.pop(-1)
q.append(i)
dp[i] = sum
return max(dp)
关于#lc-1425#的问题,请各位专家解答!
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
阿里嘎多学长 2025-03-13 10:40关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
问题解答
问题是关于 LeetCode 问题 #1425 的 constrainedSubsetSum 问题,要求使用 Python 语言实现。
问题描述:给定一个数组
nums和一个整数k,返回数组中所有子数组的最大和,且这些子数组的和不超过k。我的解答:
class Solution: def constrainedSubsetSum(self, nums: List[int], k: int) -> int: n = len(nums) dp = [0] * n dp[0] = nums[0] for i in range(1, n): dp[i] = max(dp[i-1], nums[i]) for j in range(i): if j <= k and dp[j] + nums[i] > dp[i]: dp[i] = dp[j] + nums[i] return max(dp)解释:使用动态规划解决问题。
dp[i]表示以i为结尾的子数组的最大和。遍历数组,更新dp[i]的值为最大和。使用双重循环遍历数组,更新dp[i]的值为最大和。代码中使用了
max函数来更新dp[i]的值,为的是选择当前子数组的最大和。最后返回dp中的最大值,即所有子数组的最大和。解决 无用评论 打赏 举报