算法思想总结:滑动窗口算法

                                                      创作不易,感谢三连 

一.长度最小的数组

. - 力扣(LeetCode)长度最小的数组

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int len=INT_MAX,n=nums.size(),sum=0;//len必须要给一个很大的数,否则for(int left=0,right=0;right<n;++right){sum+=nums[right];//right进窗口while(sum>=target)//符合条件后进行更新,然后出窗口{len=min(len,right-left+1);//更新长度sum-=nums[left++];}}return len==INT_MAX?0:len;}
};

 二.无重复字符的最长字串

. - 力扣(LeetCode)无字符的最长字串

class Solution {
public:int lengthOfLongestSubstring(string s) {int hash[128]={};//计数int len=0, n=s.size();for(int left=0,right=0;right<n;++right){++hash[s[right]];//进窗口while(hash[s[right]]>1)  --hash[s[left++]];//出窗口len=max(len,right-left+1);//更新长度}return len;}
};

三.最大连续1的个数

. - 力扣(LeetCode)最大连续1的个数

class Solution {
public:int longestOnes(vector<int>& nums, int k){int len=0;for(int left=0,right=0,zero=0;right<nums.size();++right){if(nums[right]==0) ++zero;//进窗口while(zero>k) if(nums[left++]==0) --zero;//出窗口len=max(len,right-left+1); }return len;}
};

 四.将x减到0的最小操作数

. - 力扣(LeetCode)将x减到0的最小操作数

class Solution {
public:int minOperations(vector<int>& nums, int x) {//将问题转化为求一个最长子数组 其大小正好==sum-xint ret=-1;int sum=accumulate(nums.begin(),nums.end(),0);//计算数组的总和int target=sum-x;//记录目标值if(target<0) return -1;//细节处理for(int left=0,right=0,temp=0,n=nums.size();right<n;++right){temp+=nums[right];//进窗口while(temp>target)  temp-=nums[left++];//出窗口if(temp==target)   ret=max(ret,right-left+1);//更新结果}return ret==-1?-1:nums.size()-ret;}
};

 五.水果成篮

. - 力扣(LeetCode)水果成篮

class Solution {
public:int totalFruit(vector<int>& fruits) {int hash[100001]={0};int ret=0,n=fruits.size();for(int left=0,right=0,kinds=0;right<n;++right){if(hash[fruits[right]]++==0) ++kinds;//进窗口while(kinds>2)  if(--hash[fruits[left++]]==0) --kinds;ret=max(ret,right-left+1);}return ret;}
};

六.找到字符串种所有字母异位词

. - 力扣(LeetCode)找到字符串种所有字母异位词

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ret;int hash1[26]={0};//用来统计p的元素个数for(char ch:p) ++hash1[ch-'a'];int hash2[26]={0};//用来统计滑动窗口的元素个数int m=p.size();for(int left=0,right=0,count=0;right<s.size();++right)//count用来记录有效字符的个数{if(++hash2[s[right]-'a']<=hash1[s[right]-'a'])  ++count;//进窗口的同时统计有效字符个数if(right-left+1>m)//判断  出窗口{if(hash2[s[left]-'a']--<=hash1[s[left]-'a'])  --count;++left;}if(count==m) ret.push_back(left);}return ret;}
};

七.最小覆盖字串

. - 力扣(LeetCode)最小覆盖字串

class Solution {
public:string minWindow(string s, string t) {int hash1[128]={0};//统计t字符串个元素的出现次数int kinds=0;//用来统计种类for(char ch:t) if(hash1[ch]++==0)  ++kinds;int hash2[128]={0};//统计s字符串中滑动窗口的元素出现次数int begin=-1,minlen=INT_MAX;//用来记录返回值情况for(int left=0,right=0,count=0;right<s.size();++right){if(++hash2[s[right]]==hash1[s[right]])  ++count;//进窗口的同时统计窗口内元素种类while(count==kinds)//当种类都一样时,可以去更新结果{if(right-left+1<minlen)//因为还需要更新begin,所以不能直接用min{minlen=right-left+1;begin=left;}if(hash2[s[left]]--==hash1[s[left]]) --count;++left;}}return begin==-1?"":s.substr(begin,minlen);}
};

八.滑动窗口总结

   当题目涉及到子串或者是子数组,都可以考虑到使用滑动窗口来进行解决

    但是有一个需要注意的地方就是如果涉及到窗口求和的话。要保证数都是正整数,否则就不满足单调性如下图这一题

涉及到不同的种类需要统计数量的时候,常常会用到哈希表!! (5-7题)

后面有类似题目会持续更新!! 

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

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

相关文章

Xcode 15.3 Archive失败

Xcode 15.3 Archive失败 背景 升级 Xcode 到 15.3&#xff0c;真机运行正常。打包的时候发现 Archive 失败。 提示&#xff1a; Call parameter type does not match function signature! 仔细看报错里是和HandyJSON相关的提示。 解决 起初以为和 Pod 库有关系&#xff0c;…

实现更高能效的汽车级低边驱动器NRVB140ESFT1G 带温度和电流限制 自保护低压侧驱动器

一起去了解关于汽车电子AEC Q101车规认证&#xff01;&#xff01;! 是一种针对分立半导体的可靠性测试认证程序&#xff0c;由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性…

【计算机网络】什么是http?

​ 目录 前言 1. 什么是HTTP协议&#xff1f; 2. 为什么使用HTTP协议&#xff1f; 3. HTTP协议通信过程 4. 什么是url&#xff1f; 5. HTTP报文 5.1 请求报文 5.2 响应报文 6. HTTP请求方式 7. HTTP头部字段 8. HTTP状态码 9. 连接管理 长连接与短连接 管线化连接…

python 爬取人民新闻

基础信息获取&#xff1a; 要闻url&#xff1a;https://www.gov.cn/yaowen/liebiao/home.htm 下一页的url&#xff1a;https://www.gov.cn/yaowen/liebiao/home_1.htm 基础代码&#xff1a; import re import openpyxl import requests from lxml import etree import osdef …

html--宠物

文章目录 htmljscss html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CodePen - Spaceworm</title><script> window.requestAnimFrame (function() {return (window.requestAnimat…

llm综述

1、语言模型进程 1.1、语言模型概述 语言模型从统计语言模型&#xff08;SLM&#xff09;逐步发展为神经语言模型&#xff08;NLM&#xff09;&#xff1b;近年&#xff0c;通过在大规模语料库上对 Transformer 模型进行预训练&#xff0c;预训练语言模型(Pre-training Langu…

国际前十正规外汇实时行情走势app软件最新排名(综合版)

外汇交易&#xff0c;作为当今世界金融市场上一个重要的板块&#xff0c;备受关注和热议。随着金融市场的日益发展&#xff0c;外汇交易也发展成为一个新兴的投资交易渠道。为了更好地满足投资者对外汇市场的需求&#xff0c;外汇实时行情走势app软件应运而生&#xff0c;它为投…

MyFileServer

靶场下载地址 https://download.vulnhub.com/myfileserver/My_file_server_1.ova 信息收集 # nmap -sn 192.168.56.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-24 22:07 CST Nmap scan report for 192.168.56.2 (192.168.56.2) Host is up (0.…

外包干了9天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2018年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Tabs)

通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 11开始默认支持安全区避让特性(默认值为&#x…

在Linux中进行OpenSSH升级

由于OpenSSH有严重漏洞&#xff0c;因此需要升级OpenSSH到最新版本。 OpenSSL和OpenSSH都要更新&#xff0c;OpenSSH依赖于OpenSSL。 第一步&#xff0c;查看当前的OpenSSH服务版本。 命令&#xff1a;ssh -V 第二步&#xff0c;安装、启动telnet&#xff0c;关闭安全文件&a…

【Linux】基础 IO(文件描述符)-- 详解

一、前言 1、文件的宏观理解 文件在哪呢&#xff1f; 从广义上理解&#xff0c;键盘、显示器、网卡、声卡、显卡、磁盘等几乎所有的外设都可以称之为文件&#xff0c;因为 “Linux 下&#xff0c;一切皆文件”。 从狭义上的理解&#xff0c;文件在磁盘&#xff08;硬件&#…

Win10系统使用IIS服务搭建WebDAV网站结合内网穿透公网访问本地文件

文章目录 推荐1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结&#xff1a; 推荐 前些天发现了一个巨牛的人工智能…

HTML万字学习总结

html文本标签特殊符号图片音频与视频超链接表单列表表格语义标签(布局) html文本标签 标签简介<html></html>根目录<head></head>规定文档相关的配置信息&#xff08;元数据<body></body>元素表示文档的内容<meta></meta>表示…

Postman请求API接口测试步骤和说明

Postman请求API接口测试步骤 本文测试的接口是国内数智客&#xff08;www.shuzike.com&#xff09;的API接口手机三要素验证&#xff0c;验证个人的姓名&#xff0c;身份证号码&#xff0c;手机号码是否一致。 1、设置接口的Headers参数。 Content-Type&#xff1a;applicati…

使用canvas实现图纸标记及回显

图纸 图纸标记后的效果图 最近做的一个qms项目里面&#xff0c;需要前端在图纸上实现标记及标记后的内容还要能够回显&#xff0c;然后后端通过标记的点&#xff0c;去读取标记图纸的内容&#xff0c;如一些公式、数据之类的&#xff0c;目前实现的功能有 在图纸上面进行矩形…

让el-input与其他组件能够显示在同一行

让el-input与其他组件能够显示在同一行 说明&#xff1a;由于el-input标签使用会默认占满一行&#xff0c;所以在某些需要多个展示一行的时候不适用&#xff0c;因此需要能够跟其他组件显示在同一行。 效果&#xff1a; 1、el-input标签内使用css属性inline 111<el-inp…

水泵房远程监控物联网系统

随着物联网技术的快速发展&#xff0c;越来越多的行业开始利用物联网技术实现设备的远程监控与管理。水泵房作为城市供水系统的重要组成部分&#xff0c;其运行状态的监控与管理至关重要。HiWoo Cloud作为专业的物联网云服务平台&#xff0c;为水泵房远程监控提供了高效、稳定、…

html--bug

文章目录 html html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>老师</title><style>body {background-color: #008000;margin: 0px;cursor: none;overflow: hidden;}</style></head><bod…

简易版 RPC 框架实现 1.0 -http实现

RPC 是“远程过程调用&#xff08;Remote Procedure Call&#xff09;”的缩写形式&#xff0c;比较通俗的解释是&#xff1a;像本地方法调用一样调用远程的服务。虽然 RPC 的定义非常简单&#xff0c;但是相对完整的、通用的 RPC 框架涉及很多方面的内容&#xff0c;例如注册发…