问题描述
小U手上有一个整数数组,他想知道如果从数组中删除任意一个元素后,能得到的长度为 k
的子数组和的最大值。你能帮小U计算出这个结果吗?
如果数组恰好为 k
个元素,那么不进行删除操作。
代码
from collections import deque
def solution(n: int, k: int, nums: list) -> int:
assert n == len(nums)
assert k <= n
mins = deque()
v_sum = 0
result = sum(nums[:k])
for i in range(n):
while len(mins) > 0 and mins[-1] > nums[i]:
mins.pop()
mins.append(nums[i])
v_sum += nums[i]
if i > k:
if mins[0] == nums[i - k - 1]:
mins.popleft()
v_sum -= nums[i - k - 1]
if i >= k:
result = max(result, v_sum - mins[0])
return result
if __name__ == "__main__":
# Add your test cases here
print(solution(5, 3, [2, 1, 3, -1, 4]) == 8)