滑动窗口概述

滑动窗口算法简介

滑动窗口是一种用于处理数组或字符串子区间问题的高效算法。它通过维护一个动态窗口(通常由两个指针表示)来避免重复计算,将时间复杂度从O(n²)优化到O(n)。

基本实现步骤

  1. 初始化窗口指针:通常使用leftright指针表示窗口的左右边界。
  2. 移动右指针:逐步扩展窗口,直到满足特定条件(如窗口内元素和达到目标值)。
  3. 调整左指针:当条件满足时,收缩窗口以寻找更优解或继续下一轮搜索。

示例代码

以下是一个求“和大于等于目标值的最短子数组长度”的滑动窗口实现:

public int minSubArrayLen(int target, int[] nums) {int left = 0, sum = 0;int minLength = Integer.MAX_VALUE;for (int right = 0; right < nums.length; right++) {sum += nums[right];while (sum >= target) {minLength = Math.min(minLength, right - left + 1);sum -= nums[left++]; // 收缩窗口}}return minLength == Integer.MAX_VALUE ? 0 : minLength;
}

常见应用场景

  • 固定窗口大小:如计算大小为k的子数组的平均值。
  • 可变窗口大小:如寻找满足条件的最短/最长子数组。
  • 字符串匹配:如找到包含所有目标字符的最小窗口。

注意事项

  • 边界条件:处理空数组或无法满足条件的情况。
  • 负数处理:若数组包含负数,滑动窗口可能失效,需改用其他方法(如前缀和+哈希表)。
  • 复杂度分析:确保每个元素最多被访问两次(O(n)时间复杂度)。

变式问题

  • 无重复字符的最长子串(LeetCode 3):使用哈希表记录字符最后出现位置。
  • 最大连续1的个数 III(LeetCode 1004):通过计数允许的翻转次数来维护窗口。

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

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

相关文章

AI 创建学生管理系统

使用腾讯元宝创建&#xff0c;整体效果不错。修正2个bug跑起来&#xff0c;达到了需要的功能先上效果图&#xff1a;按钮分类别配色&#xff0c;界面清爽。喜欢这布局创建过程&#xff1a;prompt: 使用最新稳定vue版&#xff0c;使用pinia存储&#xff0c;基于typescript, 样式…

ASP.NET Core 中的简单授权

ASP.NET Core 中的授权通过 [Authorize] 属性及其各种参数控制。 在其最基本的形式中&#xff0c;通过向控制器、操作或 [Authorize] Page 应用 Razor 属性&#xff0c;可限制为仅允许经过身份验证的用户访问该组件。 使用 [Authorize] 属性 以下代码限制为仅允许经过身份验证…

leetcode 493 翻转对

一、题目描述 二、解题思路 本题的思路与逆序数的思路相似&#xff0c;采用归并排序的思路来实现。leetcode LCR 170.交易逆序对的总数-CSDN博客 注意&#xff1a;但是逆序数的ret更新在左、右区间合并时更新&#xff0c;但本题ret更新在左、右区间合并前更新。 三、代码实现…

初识微服务-nacos配置中心

配置中心 概述 配置中心是微服务中不可或缺的组件&#xff0c;因为如果没有配置中心&#xff0c;那么各个微服务的的配置信息无法得到统一和管理&#xff0c;会变得冗余。 :::color4 配置中心是用于管理应用程序配置信息的工具 集中管理配置&#xff1a;解决微服务架构下配置分…

Android webview更新记录-aosp

一、下载 webview下载地址&#xff0c;感谢火哥分享&#xff0c;版本很全。 https://www.firepx.com/app/android-system-webview/ 二、更新 external/chromium-webview/prebuilt 具体更新那个目录&#xff0c;需要查看编译架构 这个看你的lunch就行&#xff0c;这里我的是a…

无感FOC(无传感器磁场定向控制)

我们来详细解析无感FOC&#xff08;无传感器磁场定向控制&#xff09;中的高频方波注入&#xff08;High-Frequency Square-Wave Injection, HFSWI&#xff09;​​ 的原理。这是一个用于零低速或极低速范围内估算转子位置的核心技术。核心思想与要解决的问题在电机静止或转速极…

MATLAB基于博弈论组合赋权-云模型的煤与瓦斯突出危险性评价

MATLAB基于博弈论组合赋权-云模型的煤与瓦斯突出危险性评价 1. 问题背景与核心目标 背景&#xff1a;煤与瓦斯突出是煤矿生产中的一种极其复杂的动力灾害&#xff0c;其发生机理复杂&#xff0c;影响因素众多&#xff08;如地应力、瓦斯压力、煤体物理属性等&#xff09;。对其…

JavaWeb-Servlet总结及JSP

目录 一、文件下载 二、ServletConfig对象 三、Web.xml文件使用总结 四、server.xml文件 五、JSP动态网页技术 1.概念&#xff1a; 2.动态网页&#xff1a; 3.特点&#xff1a; 4.JSP的访问原理&#xff1a; 5.JSP的文档说明&#xff1a; 6.jsp实际运行文件&#xff…

DDIM和DDPM之 间的区别与联系

核心关系概述 首先&#xff0c;要理解DDIM并不是一个全新的模型&#xff0c;而是DDPM的一个精巧的重新参数化和扩展。它们使用完全相同的训练目标和方法&#xff0c;因此你可以用一个训练好的DDPM模型直接来运行DDIM的采样算法&#xff0c;而无需重新训练。 DDIM的核心贡献是&a…

c++---map和set

这里再提二叉树&#xff08;二叉搜索树&#xff09;&#xff0c;是为了后面讲解map和set做准备。 一、二叉搜索树 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树。 若它的左子树不为空&#xff0c;则左子树上所有节点的值都…

windows下,podman迁移镜像文件位置

docker-desktop有自带的镜像文件位置迁移功能&#xff0c;但podman-desktop还没有&#xff0c;所以只能自己操作wsl导入导出来实现# 1.一定要先停止当前machine podman machine stop# 2. 导出当前 machine&#xff08;会生成 tar 镜像&#xff09; wsl --export podman-machine…

Champ-基于3D的人物图像到动画视频生成框架

本文转载自&#xff1a;https://www.hello123.com/champ ** 一、&#x1f916; Champ 是什么&#xff1f; 阿里 南大 复旦联手打造的虚拟人动作黑科技&#xff01;Champ 可不是普通动画工具&#xff0c;它能把你随手拍的小视频变成专业级 3D 动画 —— 无论跳舞、打拳还是走…

Thingsboard 3.4 源码运行 Mac Mini

拉取源码 git clone https://github.com/thingsboard/thingsboard.gitjdk11 java -version java version "11.0.27" 2025-04-15 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.278-LTS-232) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.278-LTS-23…

【AI大模型面试宝典60题】1-5

目录 Q1:仅编码器(BERT 类)、仅解码器(GPT 类)和完整的编码器-解码器架构各有什么优缺点? 1. 编码器架构 (Encoder-only) - 代表:BERT系列 2. 解码器架构 (Decoder-only) - 代表:GPT系列 3. 编码器-解码器架构 (Encoder-Decoder) - 代表:T5、BART 升华与总结 (总…

macOS中找不到钥匙串访问

如果在macOS中找不到钥匙串访问&#xff0c;请操作如下命令&#xff1a; security list-keychains可以看到类似&#xff1a; “/Library/Keychains/System.keychain” 然后执行&#xff1a; open /Library/Keychains/System.keychain然后可以将应用保留在程序坞中保留。

UCOSIII移植——学习笔记1

本文是笔者在学习 正点原子官方 的《【正点原子】手把手教你学UCOS-III实时操作系统》系列视频时整理的笔记。 视频讲解清晰透彻&#xff0c;非常感谢UP主的无私奉献&#xff01;原课程链接如下&#xff1a; &#x1f449; B站视频链接&#xff1a;【正点原子】手把手教你学UCO…

SpringBootCodeGenerator使用JSqlParser解析DDL CREATE SQL 语句

&#x1f9e0; 使用 JSqlParser 解析 CREATE TABLE SQL 语句详解在数据库开发中&#xff0c;我们常常需要从 SQL 中提取表结构信息&#xff0c;比如字段名、类型、注释等。相比使用正则表达式&#xff0c;JSqlParser 提供了更可靠的方式来解析 SQL 语句&#xff0c;尤其适用于复…

css3新增-网格Grid布局

目录flex弹性布局Gird布局开启网格布局定义网格中的行和列长度值百分比值新单位fr关键字函数minmax(min, max)函数-repeatauto-fill vs auto-fit举例说明grid-template-areasgapgrid-auto-columns和grid-auto-rowsjustify-contentalign-contentjustify-contentalign-contentjus…

最新最强新太极工具3.6 支持Windows和不支持mac电脑,支持免改码,和改码,支持12—18系统

温馨提示&#xff1a;文末有资源获取方式最新最强太极工具3.6支持Windows和Mac计算机&#xff0c;支持无代码更改和代码更改&#xff0c;支持12-18个系统 支持A7-A11芯片、Apple 5s x、iPad A7至A11芯片&#xff0c;支持所有者锁定、激活锁定、无法激活&#xff08;密码界面和禁…

深入浅出 C++20:新特性与实践

C20 是 C 编程语言的一次重要更新&#xff0c;引入了许多新特性和改进&#xff0c;旨在提升代码的简洁性、安全性和性能。本文将详细介绍 C20 的一些核心特性&#xff0c;并通过示例代码帮助读者理解这些特性的应用场景。C20 新特性总结 以下是 C20 的主要新特性及其简要描述&a…