计算长度受限的最大子数组和的函数

Go Hard functions

任务 «计算长度受限的最大子数组和的函数»

编写函数 MaxSubarraySumWithLimit(nums []int, k int) int,该函数接收一个整数数组 nums 和一个整数 k (1 ≤ k ≤ len(nums))。函数应返回长度不超过 k 的连续子数组的最大和。如果数组为空,则返回 0。实现一个时间复杂度为 O(n) 的算法。

输入格式

输入两个整数:n(数组长度,0 ≤ n ≤ 10^5)和 k(1 ≤ k ≤ n)。随后输入 n 个整数作为数组元素(-10^9 ≤ nums[i] ≤ 10^9)。

输出格式

一个整数,表示长度不超过 k 的子数组的最大和。

示例

示例 1

输入
5 3 1 2 3 4 5
输出
12

示例 2

输入
4 2 -1 -2 -3 -4
输出
-1

示例 3

输入
7 1 2 3 4 5 -1 6
输出
6

示例 4

输入
6 4 2 -1 3 4 -2 1
输出
8

示例 5

输入
3 -5 10 20
输出
15
main.go