mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
64 lines
1.9 KiB
Plaintext
64 lines
1.9 KiB
Plaintext
---
|
|
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"
|
|
companies:
|
|
- { name: "Microsoft", period: "Thirty Days", frequency: 67.9 }
|
|
- { name: "Meta", period: "Thirty Days", frequency: 53.8 }
|
|
- { name: "Bloomberg", period: "Three Months", frequency: 46.8 }
|
|
- { name: "Google", period: "Three Months", frequency: 45 }
|
|
- { name: "Amazon", period: "Three Months", frequency: 28.9 }
|
|
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
|
|
```
|