作者:家具销售_903 | 来源:互联网 | 2024-11-24 19:03
题目要求我们在一个包含N个正整数的数组中,找出一个连续子数组,这个子数组的元素之和大于或等于给定的正整数s。如果不存在这样的子数组,则返回0。
例如:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2
解释:满足条件的最短连续子数组是[4,3]。
此问题可以通过滑动窗口技术以O(n)的时间复杂度解决,具体实现如下:
class Solution():
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
"""
:param target: 目标和
:param nums: 输入数组
:return: 满足条件的最小子数组长度
"""
left = 0
right = -1
current_sum = 0
min_length = len(nums) + 1
while left < len(nums):
if current_sum < target and right + 1 < len(nums):
right += 1
current_sum += nums[right]
else:
current_sum -= nums[left]
left += 1
if current_sum >= target:
min_length = min(min_length, right - left + 1)
if min_length == len(nums) + 1:
min_length = 0
return min_length