“滑动窗口”算法详解
一、概念
滑动窗口算法是在给定特定窗口大小的数组或字符串上执行要求的操作。该技术可以将一部分问题中的嵌套循环转变为一个单循环,因此它可以减少时间复杂度。
简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作,而不在整个字符串和数组上操作,这样就降低了问题的复杂度,从而也达到降低了循环的嵌套深度。
其实这里就可以看出来滑动窗口主要应用在数组和字符串上。
二、 图解
比如说我们在这一串字符中 "pwwkew"需要不重复的最长字串,那么我们的做法是这样的:
我们可以看到
- 窗口是按照一定方向移动的
- 窗口大小并不是固定的,可以不断扩容直到满足一定的条件;也可以不断缩小,直到找到一个满足条件的最小窗口;当然也可以是固定大小。
(1)在上图中,初始化 strat= end= 0,把索引闭区间 [strat, end] 称为一个「窗口」。
(2)我们先不断地增加 end指针扩大窗口 [strat, end],直到窗口中的字符串符合要求(包含了 所给字符串中的所有字符)。
(3)此时,我们停止增加 end,转而不断增加 start指针缩小窗口 [strat, end],直到窗口中的字符串不再符合要求(不包 所给字符串 中的所有字符了)。同时,每次增加 start,我们都要更新一轮结果。
重复第 2 和第 3 步,直到 end到达所给字符串的尽头。
这个思路其实也不难,第 2 步相当于在寻找一个「可行解」,然后第 3 步在优化这个「可行解」,最终找到最优解。左右指针轮流前进,窗口大小增增减减,窗口不断向右滑动。
三、例子来源
力扣题目:无重复字符的最长子串
class Solution {public int lengthOfLongestSubstring(String s) {if(s.length() == 0) return 0 ;HashMap<Character,Integer> map = new HashMap<>();int max=0;int left = 0;for(int i =0;i<s.length();i++){if(map.containsKey(s.charAt(i))){left = Math.max(left,map.get(s.charAt(i)) + 1);}map.put(s.charAt(i), i);max = Math.max(max,i-left+1);}return max;}
}
“滑动窗口”算法详解相关推荐
- TCP 滑动窗口协议 详解
滑动窗口机制 (1).窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口. ...
- 计算机网络 TCP 滑动窗口协议 详解
滑动窗口机制解析: 1.窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口.发送窗 ...
- 滑动窗口协议 c语言,TCP滑动窗口协议详解.docx
本文源自CSDN博客: HYPERLINK "/THISISPAN" /THISISPAN欢迎各位访问博客,进行技术交流 滑动窗口机制 (1)?窗口机制 滑动窗口协议的基本原理就是 ...
- 滑动窗口算法用法及实题详解
在力扣常用解题法中,我们常常会看到这些: 滑动窗口 双指针 快慢指针/ 链表题目 原地链表翻转 区间合并 无序限定范围的数组元素查找O(N) BFS 树的DFS DFS/递归/回溯法 双堆模式 2分变 ...
- 列表左右箭头滑动_我写了一套框架,把滑动窗口算法变成了默写题
读完本文,你可以去力扣拿下如下题目: 76.最小覆盖子串 567.字符串的排列 438.找到字符串中所有字母异位词 3.无重复字符的最长子串 ----------- 鉴于前文 二分搜索框架详解 的那首 ...
- 滑动窗口算法通用思想
文章目录 一.最小覆盖子串 二.找到字符串中所有字母异位词 三.无重复字符的最长子串 最后总结 本文详解「滑动窗口」这种高级双指针技巧的算法框架,带你秒杀几道难度较大的子字符串匹配问题: 最小覆盖子串 ...
- JDA人脸检测算法详解
JDA人脸检测算法详解: 第一步: JDA算法原理详解: 作者建立了一个叫post classifier的分类器,方法如下: 1.样本准备:首先作者调用OpenCV的Viola-Jones分类器,将r ...
- 目标检测 RCNN算法详解
原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...
- 【目标检测】Faster RCNN算法详解
转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...
最新文章
- java script DOM操作
- 深入理解malloc和free
- ECSHOP让产品浏览历史按照先后进行排序
- jvm_垃圾收集算法讲解(二)
- P2408 不同子串个数
- 掌握 Ajax,第 1 部分: Ajax 入门简介
- 【重磅分享】从零到一搭建推荐系统指南白皮书.pdf(附48页下载链接)
- nginx实现 二级目录跳转 子目录跳转
- JavaScript遍历DOM
- signal、kill、fork
- python杂记-6(timedatetime模块)
- CSDN答疑:按行累加
- 2023年数据结构考研知识梳理视频哪里有
- java连接FTP下载文件
- 配置ext邮箱服务器,Extmail实现邮件服务器
- 黑马程序员:Java学习路线图上线了
- macos mojave_如何选择退出macOS Mojave Beta
- MySQL 数据库崩溃(crash)的常见原因和解决办法
- 剑指Java面试:面试官能问到的问题,都被我收集在这份PDF文档里
- 域名转发修改dns服务器,域名注册修改DNS服务器
热门文章
- java枚举类及面试题为什么枚举实现单例模式是安全的?
- qt包含头文件时显示fix available
- 分享 10 个日常使用的脚本
- lol服务器不稳定向全体玩家道歉,《英雄联盟》今日不停机更新 修复部分玩家服务器通讯不稳定问题...
- 物工一班第一次作业17038016刘瑞
- linux 安装locate命令,Linux 中的 locate 命令详解
- 电子信息专业学生,出来之后要干什么呢?(转)
- 为什么说创业者都是孤独的金刚
- 宝塔Linux启动mongodb失败,Linux安装MongoDB启动及常见问题解决
- js数组反转的几种方法