209. 长度最小的子数组

本文通过分析错误代码和理解滑动窗口,探讨如何解决寻找长度最小子数组的问题。通过滑动窗口的方法,找到使得子数组和大于等于目标值的最短子数组。同时,提到了前缀和结合二分查找的解决方案,并指出在实现过程中需要注意的细节。
摘要由CSDN通过智能技术生成

第一次没仔细审题,要是连续的子串,我直接想着把字符串逆序排序,然后找从前往后加....debug的时候才意识到....

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        nums.sort(reverse = True)
        sum = 0
        num = 0
        for i in range(0,len(nums)):
            num += 1
            sum += nums[i]
            if sum >= target:
                break;
        if sum >= target:
            return num
        else:
            return 0

不知道为什么还过了16组用例=.=

进入正题.....

思路:暴力破解,循环遍历整个数组;

          每遍历一个元素,就求后面元素的前缀和,直到出现前缀和大于目标的元素;

          用一个临时变量存储最小长度,若遍历长度小于临时变量,则重新赋值

写的错误代码,警示下自己

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        max = 10**5
        for i in range(0,len(nums)):
            temp = nums[i:]
            if temp[0] >= target:#####这是第一个没注意到点,没考虑到第一个元素就满足条件的情况
                return 1
#这句是最大的错误点,没想清楚;如果让j=i+1,j的值假如很大了,就会造成j的值比len(temp)还大
#既然temp已经是截取后的数组,那j从第一个遍历就好
            for j in range(i+1,len(temp)):
                temp[j] += temp[j-1]
                if temp[j] >= target:
                    if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值