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

目录
相关文章
|
4天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
4天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
4天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
4天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
4天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
9 2
|
4天前
leetcode代码记录(回文数
leetcode代码记录(回文数
12 1
|
4天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
4天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
4天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
7 0
|
4天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
12 0