当前位置 博文首页 > 梧桐雪的博客:LeetCode209:长度最小的子数组之双指针解法

    梧桐雪的博客:LeetCode209:长度最小的子数组之双指针解法

    作者:[db:作者] 时间:2021-09-03 15:13

    题设

    给定一个含有 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
    下一篇:没有了