📌  相关文章
📜  计算最小的每个数组元素的子数组(1)

📅  最后修改于: 2023-12-03 15:12:03.100000             🧑  作者: Mango

题目介绍

给定一个包含 n 个整数的数组,找到每个元素的最小子数组,使得该子数组的和大于等于给定目标数 num。如果不存在符合条件的子数组,则返回 0。

解决思路

遍历数组,从当前位置开始,记录当前子数组的和,直到子数组的和大于等于目标数 num,记录该子数组的长度,并更新最小长度 min_len,继续遍历直到数组末尾。如果不存在符合条件的子数组,则返回 0。

实现代码
def min_subarray_len(nums: List[int], target: int) -> int:
    n = len(nums)
    res = float('inf')
    left = 0
    cur_sum = 0
    for i in range(n):
        cur_sum += nums[i]
        while cur_sum >= target:
            res = min(res, i - left + 1)
            cur_sum -= nums[left]
            left += 1
    return res if res != float('inf') else 0
使用示例
nums = [2, 3, 1, 2, 4, 3]
target = 7
print(min_subarray_len(nums, target))  # 2
复杂度分析
  • 时间复杂度:$O(n)$,其中 $n$ 是数组的长度。遍历数组一遍,时间复杂度为 $O(n)$。
  • 空间复杂度:$O(1)$,只使用了常数个变量。