当前位置 博文首页 > 梧桐雪的博客:LeetCode209:长度最小的子数组之双指针解法
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
通过两个指针(这两个指针只能往后不能往前),如果指针之间的元素之和小于给定的阈值,那么有指针往后移,反之左指针往后移,然后我们记录最大的长度和左指针所在的位置,遍历一遍数组之后我们就可以得到结果了。
class Solution:
def minSubArrayLen(self, s: int, nums: List[int]) -> int:
left=0
mincount=float('inf')
cursum=0
for right in range(len(nums)):
cursum+=nums[right]
while cursum>=s:
mincount=min(mincount,right-left+1)
cursum=cursum-nums[left]
left+=1
return mincount if mincount!=float('inf') else 0
这里我们使用了双指针的方法,还可以使用二分查找和暴力搜索,有空补充
cs