--- title: '209. Minimum Size Subarray Sum' description: Given an array of positive integers nums and a positive integer target, return the minimal length of a subarray whose sum is greater than or equal to target. If there is no such subarray, return 0 instead icon: dot topics: - { name: "Array", slug: "array" } - { name: "Binary Search", slug: "binary-search" } - { name: "Sliding Window", slug: "sliding-window" } - { name: "Prefix Sum", slug: "prefix-sum" } issue: "https://github.com/prdlk/leetcode/issues/54" sidebar: label: 'Minimum Size Subarray Sum' badge: 'Medium' --- ::::warning If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log(n)). :::: ### Example 1: - Input: `target = 7, nums = [2,3,1,2,4,3]` - Output: `2` - Explanation: The subarray `[4,3]` has the minimal length under the problem constraint. ### Example 2: - Input: `target = 4, nums = [1,4,4]` - Output: `1` ### Example 3: - Input: `target = 11, nums = [1,1,1,1,1,1,1,1]` - Output: `0` ### Constraints: - `1 <= target <= 10^9` - `1 <= nums.length <= 10^5` - `1 <= nums[i] <= 10^4` ## Solution ```py class Solution: def minSubArrayLen(self, target: int, nums: list[int]) -> int: window_sum = 0 length = len(nums) + 1 left = 0 for right in range(len(nums)): window_sum += nums[right] while window_sum >= target: length = min(length, right - left + 1) window_sum -= nums[left] left += 1 if length > len(nums): return 0 return length ```