引入:滑动窗口

首先,这是滑动窗口的第一道题,所以简短的说一下滑动窗口的思路:

当我们题目要求找一个满足要求的区间的时候,且这个区间的left和right指针,都只需要同向移动的时候,就可以使用滑动窗口,这个区间可以变长,变短,但是双指针一定是同向移动即可!

所以滑动窗口的题目一般分别以下3步:

  1. 窗口定义:用 left 和 right 指针表示当前窗口的左右边界。

  2. 移动规则

    • 进窗口right++):当满足条件时,扩大窗口以包含新元素。

    • 出窗口left++):当不满足条件时,收缩窗口以排除左侧元素。

    • 由1,2可知,left和right都是同向移动(一般是向右)

  3. 统计结果:在移动过程中,根据题目要求记录最优解(如最长/最短子数组)。

注:有时候是出窗口后再判断更新,有时候是进窗口就可以更新,视题目而定!

一:题目

解释:找一个最短的连续子数组的和 >=taget

二:算法

①:暴力

暴力解法的时间复杂度:N^3 

a:枚举所有可能的子数组:一个长度为 n 的数组有 O(n^2) 个子数组(起点有 n 种选择,终点有 n 种选择,但实际是 n(n+1)/2,即 O(n^2))。
b:计算每个子数组的和:对于每个子数组,需要遍历其所有元素求和。最坏情况下(子数组长度为 n),求和的时间复杂度是 O(n)。
c:所以:总时间复杂度为 O(n) × O(n) × O(n) = O(n^3)。

暴力能优化的点:

讲暴力就是因为要对其进行优化,而优化过后就会发现其能用滑动窗口的思想来解决!

数组:[2,3,1,2,4,3]

当left 为2 right为2的时候 此时子数组和为8,如果按照暴力,此时我们的left会往走一个,然后right再回到left的位置向后继续遍历

优化1:但是其实我们right不用再动,只用left++即可,此时若是仍满足要求,则更新长度即可,反之不满足,则right++即可!


优化2:当left为更新为3的时候 此时我们right是指向2的 此时right可以不先回退! 先更新得知和为6,若此时的和仍大于等于t(7) 则更新区间长度,然后left直接再++ !; 反之小于t则right++

所以,综上所述,次此题是一个双指针同向移动的题目,所以用滑动窗口来解决!

②:滑动窗口

采取和滑动窗口之后,我们的双指针最多只用遍历数组一遍,所以时间复杂度为O(N)

三:代码

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left = 0,right=0,len = INT_MAX,sum=0;for(;right<nums.size();right++){sum+=nums[right];//窗口总值++while(sum>=target)//窗口符合要求{len=min(len,(right-left+1));//取区间最小值去更新lensum-=nums[left];//出窗口 减去left的值 left++;//left++}}return (len==INT_MAX?0:len);//为INT_MAX代表此题无解,则返回0}
};

易错点:

①:当窗口满足要求的时候,一定是while循环,然后出一次窗口,判断一次是否窗口还符合要求,符合则继续出窗口,直到窗口不符合要求

②:更新结果,不是窗口满足要求就更新到len,而是把当前次满足要求的结果和之前的len取较小值去更新

③:len一开始直接给个最大值,因为我们求得是区间的最小值。滑动窗口的题目,让你求最小你就给INT_MAX,让你求最大值,你初识为0,准没错!

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

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

相关文章

解锁高效开发:AWS 前端 Web 与移动应用解决方案详解

告别繁杂的部署与运维&#xff0c;AWS 让前端开发者的精力真正聚焦于创造卓越用户体验。在当今快速迭代的数字环境中&#xff0c;Web 与移动应用已成为企业与用户交互的核心。然而&#xff0c;前端开发者常常面临诸多挑战&#xff1a;用户认证的复杂性、后端 API 的集成难题、跨…

北京JAVA基础面试30天打卡04

1. 单例模式的实现方式及线程安全 单例模式&#xff08;Singleton Pattern&#xff09;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。以下是常见的单例模式实现方式&#xff0c;以及如何保证线程安全&#xff1a; 单例模式的实现方式饿汉式&#xff08;Eager Init…

Redis 缓存三大核心问题:穿透、击穿与雪崩的深度解析

引言在现代互联网架构中&#xff0c;缓存是提升系统性能、降低数据库压力的核心手段之一。而 Redis 作为高性能的内存数据库&#xff0c;凭借其丰富的数据结构、灵活的配置选项以及高效的网络模型&#xff0c;已经成为缓存领域的首选工具。本文将从 Redis 的基本原理出发&#…

耘瞳科技国产化点云处理软件,开启智能化三维测量新时代

在现代工业制造领域&#xff0c;三维点云数据已成为推动生产效率提升、质量控制优化以及智能制造转型的关键技术之一。三维点云数据能够提供高精度的物体表面信息&#xff0c;广泛应用于制造零件的质量检测&#xff1b;通过点云数据与CAD模型的对比分析&#xff0c;可以快速检测…

RabbitMQ面试精讲 Day 8:死信队列与延迟队列实现

【RabbitMQ面试精讲 Day 8】死信队列与延迟队列实现 文章标签 RabbitMQ,消息队列,死信队列,延迟队列,面试技巧,分布式系统 文章简述 本文是"RabbitMQ面试精讲"系列第8天&#xff0c;深入讲解死信队列与延迟队列的实现原理与实战应用。文章详细解析死信队列的触发…

团结引擎 1.5.0 版本发布:Android App View 功能详解

核心亮点 原生安卓应用支持 2D & 3D 双形态呈现 编辑器全流程集成 灵活调控功能 多应用并行展示 智能座舱应用示例 快速入门指南 开发说明 功能支持 实验性功能 资源链接 团结引擎 1.5.0 版本已于 4 月 14 日正式上线。本次更新中&#xff0c;车机版引入了一项突…

基于SpringBoot的OA办公系统的设计与实现

文章目录前言详细视频演示具体实现截图后端框架SpringBoot持久层框架MyBaits成功系统案例&#xff1a;代码参考数据库源码获取前言 博主介绍:CSDN特邀作者、985高校计算机专业毕业、现任某互联网大厂高级全栈开发工程师、Gitee/掘金/华为云/阿里云/GitHub等平台持续输出高质量…

知识随记-----用 Qt 打造优雅的密码输入框:添加右侧眼睛图标切换显示

Qt 技巧&#xff1a;通过 QLineEdit 右侧眼睛图标实现密码可见性切换 文章目录Qt 技巧&#xff1a;通过 QLineEdit 右侧眼睛图标实现密码可见性切换概要整体架构流程技术名词解释技术细节实现效果展示概要 本文介绍如何使用 Qt 框架为 QLineEdit 控件添加一个右侧的眼睛图标&a…

Unity里的对象旋转数值跳转问题的原理与解决方案

文章目录1. 问题描述2. 问题原因3. 解决方案3.1通过多个父子关系从而控制旋转&#xff08;推荐&#xff09;3.2 使用四元数进行旋转1. 问题描述 我们现在写一个3D的Unity程序&#xff0c;我们现在设置了一个物体后&#xff0c;我们想旋转使其改为我们想要的情况。但是我们如果…

为什么现代 C++ (C++11 及以后) 推荐使用 constexpr和模板 (Templates) 作为宏 (#define) 的替代品?​

我们用现实世界的比喻来深入理解​​为什么 C 中的宏 (#define) 要谨慎使用&#xff0c;以及为什么现代 C (C11 及以后) 推荐使用 constexpr 和模板 (Templates) 作为替代品。​​&#x1f9e9; ​​核心问题&#xff1a;宏 (#define) 是文本替换​​想象宏是一个 ​​“无脑的…

PyCharm vs. VSCode 到底哪个更好用

在 Python 开发者中&#xff0c;关于 PyCharm 和 VSCode 的讨论从未停止。一个是功能齐备的集成开发环境&#xff08;IDE&#xff09;&#xff0c;另一个是轻快灵活的代码编辑器。它们代表了两种不同的开发哲学&#xff0c;选择哪个&#xff0c;往往取决于你的项目需求、个人习…

FPGA学习笔记——VGA彩条显示

目录 一、任务 二、分析 三、代码 四、实验现象 五、更新 一、任务 使用VGA实现彩条显示&#xff0c;模式是640x48060。 二、分析 首先&#xff0c;模式是640x48060&#xff0c;那么对照以下图标&#xff0c;知道其它信息&#xff0c;不清楚时序和VGA扫描方式的可以看看这…

ES-301A :让 Modbus 设备无缝接入工业以太网的高效桥梁

在工业自动化领域&#xff0c;串口设备与以太网的互联互通是提升系统效率的关键。ES-301A 工业以太网串口网关作为上海泗博自动化精心打造的专业解决方案&#xff0c;以强大的协议转换能力、工业级可靠性和灵活配置特性&#xff0c;成为连接 Modbus RTU/ASCII 设备与 Modbus TC…

【学习笔记】FTP库函数学习

【学习笔记】FTP库函数学习 FTP基本指令步骤 1、初始化会话句柄&#xff1a;CURL *curl curl_easy_init(); 2、设置会话选项&#xff1a; 设置服务器地址&#xff0c;设置登录用户和密码 curl_easy_setopt(curl, CURLOPT_URL, ftp_server); curl_easy_setopt(curl, CURLOPT_US…

ARM Cortex-M异常处理高级特性详解

1. 异常处理概述 ARM Cortex-M处理器提供了高效的异常处理机制&#xff0c;包含多种硬件优化特性&#xff0c;显著提升了中断响应性能和系统效率。这些特性对于实时嵌入式系统和网络协议栈&#xff08;如LwIP&#xff09;的性能至关重要。 1.1 Cortex-M异常处理架构 Cortex-M异…

【图像算法 - 08】基于 YOLO11 的抽烟检测系统(包含环境搭建 + 数据集处理 + 模型训练 + 效果对比 + 调参技巧)

一、项目背景与需求 【打怪升级 - 08】基于 YOLO11 的抽烟检测系统&#xff08;包含环境搭建 数据集处理 模型训练 效果对比 调参技巧&#xff09;今天我们使用YOLO11来训练一个抽烟检测系统&#xff0c;基于YOLO11的抽烟检测系统。我们使用了大概两万张图片的数据集训练了…

vue2升级vue3中v-model的写法改造

vue2选项式 <template><div><el-rowclass"group-title":title"$t(restore_default_parameters)">{{ $t(restore_default_parameters) }}</el-row><el-form-item :label"$t(restore_default_parameters)" class"…

5G-LEO 简介

1. 什么是 5G-LEO 5G-LEO 指的是将 5G 新空口&#xff08;5G NR&#xff09;服务扩展到低轨卫星&#xff08;LEO&#xff09;上的非地面网络&#xff08;NTN, Non-Terrestrial Network&#xff09;方案。通过在距地面约500–2 000 km 的低轨道卫星上部署通信载荷&#xff0c;5G…

【MCAL】AUTOSAR架构下SPI数据同步收发具体实现

目录 前言 正文 1.依赖的SPI硬件特性 1.1. SPI时隙参数配置 1.2. SPI数据发送和接收模式 2.MCAL中的SPI配置 3.软件的具体实现 3.1. Spi_SyncTransmit 3.2. Spi_lSyncTransmit 3.3. Spi_lSyncStartJob 3.4. Spi_lSyncTransmitData8Bit 3.5. Spi_lSynTransErrCheck …

SQL157 更新记录(一)

描述现有一张试卷信息表examination_info&#xff0c;表结构如下图所示&#xff1a;FiledTypeNullKeyExtraDefaultCommentidint(11)NOPRIauto_increment(NULL)自增IDexam_idint(11)NOUNI(NULL)试卷IDtagchar(32)YES(NULL)类别标签difficultychar(8)YES(NULL)难度durationint(11…