📌  相关文章
📜  给定Array中总和大于或等于K |的最小子数组套装2(1)

📅  最后修改于: 2023-12-03 14:56:52.552000             🧑  作者: Mango

给定Array中总和大于或等于K 的最小子数组套装2

介绍

这是一个解决给定数组中总和大于或等于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