📌  相关文章
📜  至多 K 距离相邻元素的最大子序列和(1)

📅  最后修改于: 2023-12-03 15:11:48.204000             🧑  作者: Mango

至多 K 距离相邻元素的最大子序列和

介绍

在序列中找到连续的子序列,使其元素之和最大,但相邻元素的下标之差不能超过K。

这个问题可以使用动态规划来解决。我们定义一个dp数组,其中dp[i]表示从0到i的最大子序列和。对于每一个i,我们可以把它和前面的i-K到i-1个元素结合起来来得到最大子序列和。我们可以使用一个变量max_sum来记录当前的最大值,最后返回max_sum即可。

算法
def max_subarray(nums: List[int], k: int) -> int:
    n = len(nums)
    dp = [nums[0]] + [0] * (n-1)
    max_sum = nums[0]
    for i in range(1, n):
        j = max(0, i - k)
        dp[i] = max(nums[i], dp[j] + nums[i])
        max_sum = max(max_sum, dp[i])
    return max_sum
复杂度

时间复杂度:O(n)

空间复杂度:O(n)

示例
nums = [10, -5, 1, 2, 3, -6, 10]
k = 2
max_subarray(nums, k)  # 16
参考链接