小黑day5那拉提空中草原上午因下雨关闭改去河谷草原,下午薰衣草基地,入住伊宁江苏酒店附近吃当地特色羊肉串的leetcode之旅:209. 长度最小的子数组

文章介绍了几种方法解决编程问题,如`minSubArrayLen`函数,通过双指针技巧和前缀和结合二分查找找到给定整数目标值在数组中连续子数组的最小长度。
摘要由CSDN通过智能技术生成

小黑代码

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        # 数组长度
        n = len(nums)
        # 定义双指针
        head = 0
        tail = 0
        # 中间变量
        sum_ = 0
        # 结果变量
        min_ = n + 1
        # 开始迭代 
        while head < n:
            # 尾部指针右移
            while tail < n and sum_ < target:
                sum_ += nums[tail]
                tail += 1
            # 记录长度
            if sum_ >= target and min_ > tail - head:
                min_ = tail - head
            sum_ -= nums[head]
            head += 1
        return min_ if min_ != n + 1 else 0

在这里插入图片描述

小黑根据思路自己尝试前缀和二分法

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        # 数组长度
        n = len(nums)
        # 计算前缀和
        arr = [0] + [nums[0]] * n
        for i in range(1, n+1):
            arr[i] = arr[i-1] + nums[i-1]
        # 结果变量
        res = n + 1
        # 开始进行二分查找
        print(arr)
        for i in range(n+1):
            if arr[i] < target:
                continue
            l = self.left_search(arr[:i], arr[i] - target)
            length = i - l + 1 if arr[i] - target < arr[l] else i - l
            if length < res:
                res = length
        return res if res != n + 1 else 0
       
    def left_search(self, arr, target):
        # 初始化双指针
        left = 0
        right = len(arr) - 1
        while left <= right:
            mid = (left + right) // 2
            if arr[mid] < target:
                left = mid + 1
            else:
                right = mid - 1
        return left

在这里插入图片描述

前缀和二分法

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        # 数组长度
        n = len(nums)
        # 构造前缀和数组
        arr = [0]
        for i in range(n):
            arr.append(nums[i]+arr[i])
        # 开始进行二分查找大于等于arr[i]+target的最近左位置
        # 结果变量
        res = n + 1
        for i in range(n):
            end = self.left_search(arr,i+1, target+arr[i])
            if end == n + 1:
                continue
            length = end - i
            if length < res:
                res = length
        return res if res != n + 1 else 0
    
    def left_search(self, arr, start, target):
        n = len(arr)
        # 定义左右指针
        start = start
        end = n - 1
        while start <= end:
            mid = (start + end) // 2
            if arr[mid] < target:
                start = mid + 1
            else:
                end = mid - 1
        return start

在这里插入图片描述

双指针法

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        # 数组长度
        n = len(nums)
        # 中间变量
        sum_ = 0
        # 头尾指针
        head = 0
        tail = 0
        # 结果变量
        res = n + 1
        # 开始双指针迭代
        while tail < n:
            sum_ += nums[tail]
            tail += 1
            while sum_ >= target:
                if tail - head < res:
                    res = tail - head
                sum_ -= nums[head]
                head += 1
        return res if res != n + 1 else 0

在这里插入图片描述

小黑生活

酒店早餐

在这里插入图片描述

补充喀纳斯的烤馕

在这里插入图片描述在这里插入图片描述

前往那拉提空中草原,但由于天气原因景区封闭,前往河谷草原

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(坐在草地上)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

骑上小马在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

午饭,迟到团友加了菜

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

下午前往薰衣草基地,离调包侠不远了

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

入住伊宁江苏酒店

在这里插入图片描述

去小巷子里吃便宜的烧烤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

下次更新day6赛里木湖day7乌鲁木齐回京

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值