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

news/2024/5/20 10:27:05 标签: 算法, leetcode, 滑动窗口

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
在这里插入图片描述

点击直接跳转到该题目

目录

  • 1️⃣题目描述
  • 2️⃣算法分析
  • 3️⃣代码编写

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;
    }
};

最后就是通过啦!!!

在这里插入图片描述


http://www.niftyadmin.cn/n/5083330.html

相关文章

yolov8 (2) : 模型训练

yolov8 github: https://github.com/ultralytics/ultralytics yolov8 网络详解参见: YOLOv8 (1) : 网络讲解1. 环境安装 安装ultralytics包pip install ultralytics在终端输入yolo命令࿰

如何批量导出文件名?

如何批量导出文件名&#xff1f;在电商行业从事工作的一些同事可能经常会遇到这样的问题&#xff1a;需要将产品文件夹中的所有图片或产品名称导出到Excel工作表&#xff0c;在工作表中创建这些名称的超链接&#xff0c;并且可能会为每个产名称的后面填写一些相关信息&#xff…

无图形化界面使用wireshark抓包分析数据

1. 解决Wireshark的权限不足问题 当普通用户身份运行Wireshark时&#xff0c;会遇到权限不足的问题。原因在于dumpcap需要root权限才能正常工作。以下是解决此问题的步骤&#xff1a; 创建用户组 我们将创建一个名为wireshark的用户组&#xff1a; sudo groupadd wireshark 更…

【LeetCode力扣】75 快速排序的子过程partition(荷兰国旗问题)

目录 1、题目介绍 2、解题思路 2.1、冒泡排序暴力破解 2.2、快速排序的子过程partition 2.2.1、详细过程描述 2.2.2、代码描述 1、题目介绍 原题链接&#xff1a;75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 示例 1&#xff1a; 输入&#xff1a;nums [2,0,2…

营销科学中的边际ROI计量随笔记

主要是读这篇基于AB实验的边际ROI增长分析实践 的随笔记。 传统ROI计量 一些营销活动中的传统的ROI的计算方式是&#xff1a; 拉新ROI LTV / CAC 用户生命周期价值/平均获客成本 买量类拉新策略评估使用。 促活ROI GMV / RotalRecallCost 促销活动期间的总销售额/促销活…

香港高才通申请详细步骤

去年与同学聊天&#xff0c;同学建议我申请香港优才&#xff0c;说是对孩子以后考学有好处&#xff0c;我家孩子现在还可以赶得上&#xff0c;当时查了一下&#xff0c;但是没有查到具体的就放下忙工作去了&#xff0c;今年刚好公司在宣讲海外留学服务的增值服务时&#xff0c;…

理解Go中的Map

在Go中&#xff0c;map数据类型就是大多数程序员认为的dictionary类型。它将键映射到值&#xff0c;形成键值对&#xff0c;这是Go中存储数据的一种有用方法。map的构造方法是使用关键字map&#xff0c;后跟方括号[]中的键数据类型&#xff0c;然后是值数据类型。键—值对放在两…

NovelAi本地部署版详细教程

这几天NovelAI模型泄露了。那就凑巧了&#xff0c;就以这个模型为例。完整的介绍一下stable-diffusion-webui本地安装方法几乎是从零开始说起&#xff08;除了不教操作系统安装&#xff09;。WebUI就是stable-diffusion的可视化版本&#xff01; 本地安装的好处是&#xff1a; …