【算法|滑动窗口No.1】leetcode209. 长度最小的子数组

这篇具有很好参考价值的文章主要介绍了【算法|滑动窗口No.1】leetcode209. 长度最小的子数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
【算法|滑动窗口No.1】leetcode209. 长度最小的子数组,LeetCode,手撕算法系列专栏,算法,leetcode,滑动窗口

点击直接跳转到该题目

1️⃣题目描述

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

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [nums[l], nums[l+1], ..., nums[r-1], nums[r]] ,并返回其长度。如果不存在符合条件的子数组,返回 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

注意:

  • 1 <= target <= 10^9
  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^5

2️⃣算法分析

解题思路如下:

  • 步骤一:使用双指针left和right来构建滑动窗口,初始时left和right都为0。
  • 步骤二:进入循环,将右指针right向右移动,每次将nums[right]的值加到sum中。
  • 步骤三:进入while循环,判断当前窗口内的和sum是否大于等于目标值target。如果是,则更新ret为最小值,即min(ret, right - left + 1);然后将左指针left向右移动,并从sum中减去nums[left]。
  • 然后循环步骤二和步骤三直到右指针right达到数组的末尾最后返回结果即可。

3️⃣代码编写

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int n = nums.size();
        int ret = INT_MAX, sum = 0;
        for(int left = 0,right = 0;right < n;right++)
        {
            // 进窗口
            sum += nums[right];

            while(sum >= target)
            {
                // 更新结果
                ret = min(ret,right - left + 1);

                // 出窗口
                sum -= nums[left++];
            }
        }
        return ret == INT_MAX ? 0 : ret;
    }
};

最后就是通过啦!!!

【算法|滑动窗口No.1】leetcode209. 长度最小的子数组,LeetCode,手撕算法系列专栏,算法,leetcode,滑动窗口文章来源地址https://www.toymoban.com/news/detail-720837.html

到了这里,关于【算法|滑动窗口No.1】leetcode209. 长度最小的子数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java数据结构与算法刷题-----LeetCode209. 长度最小的子数组

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 代码:时间复杂度O(n).空间复杂度O(1)

    2024年01月21日
    浏览(33)
  • 【Leetcode】209. 长度最小的子数组

    给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 提示:

    2024年02月13日
    浏览(24)
  • leetcode-209.长度最小的子数组

    代码

    2024年02月13日
    浏览(34)
  • 【LeetCode209】 长度最小的子数组

    滑动窗口型双指针 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出

    2024年01月23日
    浏览(38)
  • leetcode 70.爬楼梯+209.长度最小的子数组

    70. 爬楼梯 - 力扣(LeetCode) 题目: 假设你正在爬楼梯。需要  n  阶你才能到达楼顶。 每次你可以爬  1  或  2  个台阶。你有多少种不同的方法可以爬到楼顶呢?  示例:   输入: n = 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 +

    2024年02月03日
    浏览(37)
  • ( 数组) 209. 长度最小的子数组——【Leetcode每日一题】

    难度:中等 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数

    2024年02月06日
    浏览(28)
  • 【代码随想录-Leetcode第六题:209. 长度最小的子数组】

    给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 参考【代码随想录】 示例 1: 示例 3: 提示: 1 = target = 109 1 = nums.length

    2024年02月12日
    浏览(27)
  • 滑动窗口实例1(长度最小的子数组)

    给定一个含有  n   个正整数的数组和一个正整数  target  。 找出该数组中满足其和   ≥ target   的长度最小的  连续子数组   [numsl, numsl+1, ..., numsr-1, numsr]  ,并返回其长度 。 如果不存在符合条件的子数组,返回  0  。 示例 1: 示例 2: 示例 3: 提示: 1 = target = 109 1 =

    2024年02月11日
    浏览(26)
  • Leetcode 977-有序数组的平方 | LeetCode209-长度最小的子数组 | Leetcode59-螺旋矩阵

    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 思考: 这个数组为有序数组,那么即使前面有负的,数组平方的最大值只能是在数组的倆端,不是在左边就是右边,不可能是在中间 由此想到双指针做法,left从

    2024年02月16日
    浏览(38)
  • LeetCode977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    LeetCode977.有序数组的平方 思路:         双指针应用         因为数组是有序的,数组中可能存在负数,所以其平方的最大值只可能是数组的头或尾,因此可以定义两个指针,i指向头,j指向尾。同时定义一个新数组result,让k指向新数组的最后一个元素,当nums[i] * nums[i]

    2023年04月21日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包