209. 长度最小的子数组

问题链接

https://leetcode.cn/problems/minimum-size-subarray-sum/description/

解题思路

这是一个长度不定的滑动窗口。

我们需要设置一个left指针和right指针,分别指向滑动窗口的左边界和右边界。

我们判定当前的滑动窗口是否满足题意,如果不满足,则继续移动右指针。

如果满足题意,那开始移动左指针,试图寻找最小的满足条件的范围。

在这个过程中,更新res。

代码

复制代码
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        left_ptr, right_ptr = 0, 0
        res = 0
        cnt = 0
        while right_ptr < len(nums):
            if nums[right_ptr] >= target:
                return 1
            cnt += nums[right_ptr]
            while left_ptr < right_ptr and cnt >= target:
                res = min(res, right_ptr-left_ptr+1) if res != 0 else max(res, right_ptr-left_ptr+1)
                cnt -= nums[left_ptr]
                left_ptr += 1
            right_ptr += 1
        return res
复制代码

 也可以这样写:

复制代码
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        left_border = right_border = 0
        cur_sum = 0
        res = len(nums) + 1
        while right_border < len(nums):
            cur_sum += nums[right_border]
            while left_border <= right_border and cur_sum >= target:
                res = min(right_border-left_border+1, res)
                cur_sum -= nums[left_border]
                left_border += 1
            right_border += 1
        return res if res <= len(nums) else 0
复制代码

 

posted @   BJFU-VTH  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示