宇宙无敌飞天遁地大木木 2025-03-13 10:40 采纳率: 32.5%
浏览 8
已结题

关于#lc-1425#的问题,请各位专家解答!


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)

  • 写回答

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 中的最大值,即所有子数组的最大和。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 修改了问题 3月13日
  • 创建了问题 3月13日