leetcode代码记录(长度最小的子数组

简介: leetcode代码记录(长度最小的子数组

1. 题目:

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 连续

子数组

[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]

输出:2

解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]

输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]

输出:0

2. 我的代码:

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        fast_i = 0
        slow_i = 0
        # 记录目前总和
        sum_now = 0
        len_min = 100000000

        # 滑动窗口
        for fast_i in range(len(nums)):
            sum_now += nums[fast_i]
            while sum_now >= target:
                len_min = min(len_min, fast_i - slow_i + 1)
                sum_now -= nums[slow_i]
                slow_i += 1


        if len_min == 100000000:
            return 0
        return len_min

这种求区间内东西的题型可以使用滑动窗口,滑动窗口其实就是快慢指针中间夹的部分。因为要求值,所以为了防止再去遍历滑动窗口内的元素,所以,定义了数字总一步一步地加和。

快指针的范围是从0len(nums) - 1,然后当总和大于等于target时慢指针向右缩短,并且记录此时的最小长度(作为最小长度的起始值,可以定义一个非常大的数字)。

如果最小长度还是初始值,则说明没有最小长度的子数组,因此返回0

目录
相关文章
|
3天前
力扣-2029-石子游戏-‘屎山’代码
力扣-2029-石子游戏-‘屎山’代码
12 3
|
3天前
|
存储
力扣-2904最短且字典序最小的美丽子序列
力扣-2904最短且字典序最小的美丽子序列
6 1
|
24天前
|
人工智能
力扣100114. 元素和最小的山形三元组 II(中等)
力扣100114. 元素和最小的山形三元组 II(中等)
|
30天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
16 0
|
30天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
18 4
|
30天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
17 1
|
30天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
16 1
|
30天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
13 2
|
30天前
leetcode代码记录(回文数
leetcode代码记录(回文数
16 1
|
30天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
19 2