📅  最后修改于: 2023-12-03 15:11:48.204000             🧑  作者: Mango
在序列中找到连续的子序列,使其元素之和最大,但相邻元素的下标之差不能超过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