209. Minimum Size Subarray Sum
Description
Given an array of positive integers nums
and a positive integer target
, return the minimal length of a contiguous subarray [numsl, numsl+1, ..., numsr-1, numsr]
of which the sum is greater than or equal to target
. If there is no such subarray, return 0
instead.
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 <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104
Follow up: If you have figured out the O(n)
solution, try coding another solution of which the time complexity is O(n log(n))
.
Solution
minimum-size-subarray-sum.py
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
n = len(nums)
total = sum(nums)
if total < target: return 0
left, right = 1, n
def good(k):
s = 0
for i, x in enumerate(nums):
if i >= k:
s -= nums[i - k]
s += x
if s >= target: return True
return False
while left < right:
mid = left + (right - left) // 2
if good(mid):
right = mid
else:
left = mid + 1
return left