📅  最后修改于: 2023-12-03 14:56:52.552000             🧑  作者: Mango
这是一个解决给定数组中总和大于或等于K的最小子数组的问题。这个问题在实际中也有很多应用。例如,在学生选课系统中,我们需要找出总学分大于等于某一值的最小课程组合;在商品推荐系统中,我们需要找出总价格大于等于某一值的最小商品套装。
本解决方案基于滑动窗口算法,时间复杂度为O(n)。
def minSubArraySum(nums: List[int], k: int) -> int:
pass
nums
- 需要查找的数组,长度为n($1 \leq n \leq 2 \times 10^5$)k
- 目标和,整数($1 \leq k \leq 10^9$)返回满足总和大于等于k的最小子数组长度。如果不存在这样的子数组,则返回0。
from typing import List
def minSubArraySum(nums: List[int], k: int) -> int:
n = len(nums)
ans = float("inf")
s = 0
j = 0
for i in range(n):
s += nums[i]
if s >= k:
while s >= k:
ans = min(ans, i - j + 1)
s -= nums[j]
j += 1
return ans if ans != float("inf") else 0
>>> minSubArraySum([2, 3, 1, 2, 4, 3], 7)
2