leetcode209. 长度最小的子数组

文章介绍了如何使用滑动窗口算法解决LeetCode中的一个问题,对比了双指针方法和暴力解法,并提供了Python代码示例。滑动窗口通过一次遍历减少计算复杂度,而暴力解法则是双重循环,效率较低。
摘要由CSDN通过智能技术生成

leetcode链接

题目

在这里插入图片描述

思路

所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。

在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环完成了一个不断搜索区间的过程。

滑动窗口则使用一个for循环来完成这个操作。

代码

代码1 双指针(滑动窗口)

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        left = 0
        right = 0
        temp_sum = 0
        min_length = len(nums)+1
        
        while right<len(nums):
            temp_sum += nums[right]
            right += 1
            while temp_sum>=target:
                min_length = min(right-left, min_length)
                temp_sum -= nums[left]
                left += 1
        if min_length==len(nums)+1:
            return 0
        else:
            return min_length

代码2 暴力破解

class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        l = len(nums)
        min_len = float('inf')
        
        for i in range(l):
            cur_sum = 0
            for j in range(i, l):
                cur_sum += nums[j]
                if cur_sum >= s:
                    min_len = min(min_len, j - i + 1)
                    break
        
        return min_len if min_len != float('inf') else 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值