LeetCode --- 长度最小的子数组(滑动窗口)

前言

滑动窗口算法是一种用于解决数组或者列表中子数组或者字串问题的方法,通常用于在给定数据上执行连续区间的操作,算法基本思想是维护一个固定大小或不定大小的窗口,通过移动窗口的起始位置和结束位置来遍历整个数据。在每个窗口位置,都可以进行一些判断。

一般算法步骤:

  1. 初始化窗口的起始和结束位置。
  2. 将窗口内的元素用于计算或判断。
  3. 移动窗口的起始和结束位置。
  4. 重复步骤2和步骤3,直到窗口的结束位置达到数据集的末尾。

题目

代码解析

看这道题,如果用暴力方法的话,可以两层for循环,来寻找满足条件的子数组。时间复杂度n^2。

可以考虑使用同向双指针来优化一下,一个指针来控制前面,一个指针来向后移动。

当子数组大于target的时候才需要统计大小,统计完子数组之和,将字串的头部删除,尾部继续向后移动。比如数组当中2 + 3 + 1 + 2之和才大于7,此时子数组的长度为4,将头部2删除,尾部向后移动,加上4,此时子串和是大于7的,删除头部,直到子数组的和小于7,此时子数组为2 4,尾部后移加上3,子数组和大于7,删除头部,此时子数组就剩4 和 3,也就是我们最终要的答案,最小长度的子数组。

观察每次符合条件的子数组,非常像一个窗口在数组中滑来滑去。因此我们也可以将同向双指针算法称为滑动窗口

class Solution {
public:int minSubArrayLen(int t, vector<int>& nums) {queue<int> q;int n = nums.size();int sum = 0;int minq = 0x3f3f3f3f;// 1. 当队列为空的时候,什么都不管,入队// 2. 当队列中的数字和大于等于tar的时候,纪律个数并出队到小于tarfor (int i = 0; i < n; i++){if (q.empty()){q.push(nums[i]);sum += nums[i];}else {if (sum < t){sum += nums[i];q.push(nums[i]);}while (sum >= t){int len = q.size();minq = min(minq, len);int tt = q.front();sum -= tt;q.pop();}}}return minq == 0x3f3f3f3f ? 0 : minq;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505385.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多态——细致讲解

&#x1f536;多态基础概念  &#x1f536;概念   &#x1f531;多态性   &#x1f531;多态——重新(覆盖)  &#x1f536;示例   &#x1f536;基本使用方法   &#x1f536;特例    &#x1f531;协变    &#x1f531;析构函数重写  &#x1f531;多态原理…

LaTeX-设置表格大小

文章目录 LaTeX-设置表格大小1.创建表格2.设置表格的宽度2.1控制表格每一列的宽度2.2控制整个表格的宽度 3.设置表格的外观4.LaTeX绘制三线表 LaTeX-设置表格大小 本文介绍了LaTeX如何设置表格的大小、改变表格的外观以及如何绘制三线表。 1.创建表格 在LaTeX中创建表很耗时…

算法修炼-动态规划之路径问题(1)

62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;选定一个网格为终点&#xff0c;走到这个网格的所有走法就是这个网格的上面一个网格的所有走法加上这个网格左边一个网格的所有走法&#xff0c;然后做好初始化工作就行。 class Solution { public:int…

扼杀网络中的环路:STP、RSTP、MSTP

目录 前言&#xff1a; 一、STP&#xff08;Spanning Tree Protocol&#xff09; 1.1 STP功能 1.2 STP应用 二、RSTP&#xff08;Rapid Spanning Tree Protocol&#xff09; 2.1 RSTP功能 2.2 RSTP应用 三、MSTP&#xff08;Multiple Spanning Tree Protocol&#xff0…

【中英对照】【自译】【精华】麻省理工学院MIT技术双月刊(Bimonthly MIT Technology Review)2024年3/4月刊内容概览

一、说明 Notation 仅供学习、参考&#xff0c;请勿用于商业行为。 二、本期封面、封底 Covers 本期杂志购于新加坡樟宜机场Changi Airport Singapore&#xff0c;售价为20.50新元。 本期仍然关注伦敦的AI大会。&#xff08;笔者十分想去&#xff0c;在伦敦和MIT校园均设有会…

SpringBoot整合rabbitmq-扇形交换机队列(三)

说明&#xff1a;本文章主要是Fanout 扇形交换机的使用&#xff0c;它路由键的概念&#xff0c;绑定了页无用&#xff0c;这个交换机在接收到消息后&#xff0c;会直接转发到绑定到它上面的所有队列。 大白话&#xff1a;广播模式&#xff0c;交换机会把消息发给绑定它的所有队…

进程间的通信 -- 共享内存

一 共享内存的概念 1. 1 共享内存的原理 之前我们学过管道通信&#xff0c;分为匿名管道和命名管道&#xff0c;匿名管道通过父子进程的属性继承原理来完成父子进程看到同一份资源的目的&#xff0c;而命名管道则是通过路径与文件名来唯一标识管道文件&#xff0c;来让不同的进…

【系统分析师】-需求工程

一、需求工程 需求工程分为需求开发和需求管理。 需求开发&#xff1a;需求获取&#xff0c;需求分析&#xff0c;需求定义、需求验证。 需求管理&#xff1a;变更控制、版本控制、需求跟踪&#xff0c;需求状态跟踪。&#xff08;对需求基线的管理&#xff09; 1.1需求获取…

02-设计概述

上一篇&#xff1a;01-导言 本章重点讨论 JNI 中的主要设计问题。本节中的大多数设计问题都与本地方法有关。调用 API 的设计将在第 5 章&#xff1a;调用 API 中介绍。 2.1 JNI 接口函数和指针 本地代码通过调用 JNI 函数来访问 Java 虚拟机功能。JNI 函数可通过接口指针使用…

如何实现桌面美化

一.隐藏桌面图标 1. 在商店里下载TranslucentTB 二.设置底层图标 1.下载Nexus 打开官网&#xff1a; Winstep Nexus Dock and Nexus Ultimate - The Advanced Docking System for Windows 三.设置插件 1.打开致美化官网 致美化 - 最专业的视觉美化交流平台 (zhutix.com) 2.注…

MySQL进阶:全局锁、表级锁、行级锁总结

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;MySQL进阶&#xff1a;MySQL事务、并发事务问题及隔离级别 &#x1f4da;订阅专栏&#xff1a;MySQL进阶 希望文章对你们有所帮助…

swagger在java中的基本使用

自动生成接口文档&#xff0c;和在线接口测试的框架。 导入依赖 <!-- knife4j对swagger进行一个封装--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><versi…