算法修炼之路之滑动窗口

目录

一:滑动窗口的认识及模板

二:LeetcodeOJ练习 

1.第一题

2.第二题 

3.第三题 

4.第四题 

5.第五题 

 6.第六题

7.第七题

一:滑动窗口的认识及模板

这里先通过一道题来引出滑动窗口

LeetCode 209 长度最小的子数组

画图分析: 

 具体代码:

int minSubArrayLen(int target, vector<int>& nums) {int sum=0,ret=INT_MAX;int left=0,right=0;while(right<nums.size()){sum+=nums[right++];//进窗口while(sum>=target)//判断{ret=min(ret,right-left);//更新结果sum-=nums[left++];//出窗口}}return  ret==INT_MAX? 0:ret;}

二:LeetcodeOJ练习 

1.第一题

 LeetCode_3 无重复字符的最长子串

 画图分析:

具体代码:

int lengthOfLongestSubstring(string s) {int hash[129]={0};int ret=0;for(int left=0,right=0;right<s.size();++right){hash[s[right]]++;//进窗口while(hash[s[right]]>1)//判断{hash[s[left++]]--;//出窗口}ret=max(ret,right-left+1);//更新结果}return ret;}

2.第二题 

 LeetCode_1004 最大连续1的个数III

画图分析:

具体代码:

int longestOnes(vector<int>& nums, int k) {int zero=0,ret=0;for(int left=0,right=0;right<nums.size();++right){if(nums[right]==0) zero++;//进窗口while(zero>k)//判断{if(nums[left++]==0) zero--;//出窗口}ret=max(ret,right-left+1);//更新结果}return ret;}

3.第三题 

 LeetCode-1658 将x减到0的最小操作数

画图分析:

具体代码:

int minOperations(vector<int>& nums, int x) {int sum=0;//计算数组和for(int e:nums) sum+=e;int target=sum-x;if(target<0) return -1;int ret=-1;for(int left=0,right=0,tmp=0;right<nums.size();++right){tmp+=nums[right];//进窗口while(tmp>target)//判断{tmp-=nums[left++];//出窗口}if(tmp==target) ret=max(ret,right-left+1);//更新结果}if(ret==-1) return -1;else return nums.size()-ret;}

4.第四题 

LeetCode_904 水果成篮

画图分析:

 

具体代码:

int totalFruit(vector<int>& f) {unordered_map<int,int> hash;//统计窗口中水果的种类数int ret=0;for(int left=0,right=0;right<f.size();++right){hash[f[right]]++;//进窗口while(hash.size()>2)//判断{//出窗口hash[f[left]]--;if(hash[f[left]]==0) hash.erase(f[left]);++left;}ret=max(ret,right-left+1);//更新结果}return ret;}

5.第五题 

 LeetCode_438 找到字符串中所有的字母异位词

画图分析:

具体代码:

vector<int> findAnagrams(string s, string p) {vector<int> ret;int hash1[26]={0};//统计字符串p中字符个数for(auto e:p) hash1[e-'a']++;int len=p.size();int hash2[26]={0};//统计窗口中出现字符的个数for(int left=0,right=0,count=0;right<s.size();right++){char in=s[right];if(++hash2[in-'a']<=hash1[in-'a']) count++;//进窗口+维护countif(right-left+1>len)//判断{char out=s[left++];if(hash2[out-'a']--<=hash1[out-'a']) count--;//出窗口+维护count}//更新结果if(count==len) ret.push_back(left);}return ret;}

 6.第六题

LeetCode_30 串联所有单词的子串

画图分析:

具体代码:

 vector<int> findSubstring(string s, vector<string>& words) {unordered_map<string,int> hash1;//统计words中单词的次数for(auto e:words) hash1[e]++;vector<int> ret;int len=words[0].size(),m=words.size();for(int i=0;i<len;++i)//执行len次{unordered_map<string,int> hash2;for(int left=i,right=i,count=0;right<s.size();right+=len){string in=s.substr(right,len);if(hash1.count(in) && ++hash2[in]<=hash1[in]) ++count;//进窗口+维护countif(right-left+1>len*m)//判断{string out=s.substr(left,len);if(hash1.count(out) && hash2[out]--<=hash1[out]) --count;//出窗口+维护countleft+=len;}if(count==m) ret.push_back(left);//更新结果}}return ret;}

7.第七题

LeetCode_76 最小覆盖子串

画图分析:

具体代码: 

 string minWindow(string s, string t) {int hash1[128]={0};//统计字符串t中每个字符出现的次数int kinds=0;//统计字符串t中有效字符的种类for(auto ch:t)if(hash1[ch]++==0) kinds++;int hash2[128]={0};//统计窗口中出现字符的次数int minlen=INT_MAX,begin=-1;for(int left=0,right=0,count=0;right<s.size();++right){char in=s[right];if(++hash2[in]==hash1[in]) ++count;//进窗口+维护countwhile(count==kinds)//判断条件{if(right-left+1<minlen)//更新结果{minlen=right-left+1;begin=left;} char out=s[left++];if(hash2[out]--==hash1[out]) count--;//出窗口+维护count}}if(begin==-1) return "";else return s.substr(begin,minlen);}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容&#xff1a; 使用AWS CLI配置密钥对创建ec2 server使用drawio&#xff08;vscode插件&#xff09;进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台&#xff0c;可以提供ec2&#xff0c;vpc&#xff0c;SNS以及clo…

使用 Python 遍历文件夹

要解决这个问题&#xff0c;使用 Python 的标准库可以很好地完成。我们要做的是遍历目录树&#xff0c;找到所有的 text 文件&#xff0c;读取内容&#xff0c;处理空行和空格&#xff0c;并将处理后的内容合并到一个新的文件中。 整体思路&#xff1a; 遍历子目录&#xff1…

2.3MyBatis——插件机制

2.3MyBatis——插件机制 1.基本用法2.原理探究2.1加载过程2.2执行过程2.2.1 插件的执行点2.2.2 SQL执行的几个阶段2.2.3 如何梳理出执行流程 插件机制是一款优秀框架不可或缺的组成部分&#xff0c;比如spring、dubbo&#xff0c;还有我们要聊的Mybatis等等。所谓插件&#xff…

vSAN02:容错、存储策略、文件服务、快照与备份、iSCSI

目录 vSAN容错条带化存储策略1. 创建新策略2. 应用存储策略 vSAN文件服务文件服务快照与备份 vSAN iSCSI目标服务 vSAN容错 FTT&#xff1a;Fault to Tolerance 允许故障数 故障域&#xff1a;每一台vSAN主机是一个故障域 - 假设3台超融合&#xff08;3计算1存储&#xff09;&…

力扣 简单 110.平衡二叉树

文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…

基于Java的GeoTools对Shapefile文件属性信息深度解析

目录 前言 一、Shapefile的属性列表信息 1、属性表格信息 2、属性表格包含的要素 二、GeoTools对属性表格的解析 1、常规解析方法 2、基于dbf文件的属性信息读取 三、总结 前言 ESRI Shapefile&#xff08;shp&#xff09;&#xff0c;或简称shapefile&#xff0c;是美…

【Spring Boot React】Spring Boot和React教程 完整版

【Spring Boot & React】Spring Boot和React教程 在B站找到一个不错的SpringBoot和React的学习视频&#xff0c;作者是amigoscode 【Spring Boot & React】Spring Boot和React教程 2023年更新版【Spring Boot React】价值79.9美元&#xff0c;全栈开发&#xff0c;搭…

如何使用CMD命令启动应用程序(二)

说明&#xff1a;去年1024发布了一篇博客&#xff0c;介绍如何使用CMD命令启动应用程序&#xff0c;但实际情况&#xff0c;有些程序可能无法用配置环境变量的方式来启动&#xff0c;本文针对两种情况下的程序&#xff0c;如何使用CMD命令来启动&#xff0c;算是对上一篇博客的…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

鸿蒙harmonyos next flutter混合开发之开发plugin(获取操作系统版本号)

创建Plugin为my_plugin flutter create --org com.example --templateplugin --platformsandroid,ios,ohos my_plugin 创建Application为my_application flutter create --org com.example my_application flutter_application引用flutter_plugin&#xff0c;在pubspec.yam…

如何解决 MySQL ERROR 1040 (08004): Too many connections ?

MySQL 是最流行的开源关系数据库管理系统之一&#xff0c;它也是开发人员中非常常用的数据库。即便它高度健壮和可伸缩性极强&#xff0c;像任何软件一样&#xff0c;它也可能出现错误。我们会经常遇到一个错误&#xff0c;特别是在高流量系统中&#xff0c;error 1040 (08004)…

51c视觉~CV~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/11668984 一、 CV确定对象的方向 介绍如何使用OpenCV确定对象的方向(即旋转角度&#xff0c;以度为单位)。 先决条件 安装Python3.7或者更高版本。可以参考下文链接&#xff1a; https://automaticaddison.com/how-to-s…

阳台山足球营地的停车位探寻

阳台山足球营地的环境是真好哈。停车场名称&#xff1a;阳台山森林公园配套停车场。应该很多爬山的人车子也停在这里。而且我没想到的&#xff0c;阳台山的山泉水还有不少居民每天提着空桶去山上装。看来环境是真的很好哈 停车场有地面和地下停车场&#xff0c;停车位个数查不…

java 数据存储方式

1. 变量存储 这是最基本的数据存储方式&#xff0c;通过声明变量来存储数据。变量可以是基本数据类型&#xff08;如int、float、char等&#xff09;&#xff0c;也可以是引用数据类型&#xff08;如对象、数组等&#xff09;。变量存储的数据通常存储在内存中&#xff0c;随着…

【记录】Excel|Excel 打印成 PDF 页数太多怎么办

【记录】Excel&#xff5c;解决 Excel 打印成 PDF 页数过多的问题 文章目录 【记录】Excel&#xff5c;解决 Excel 打印成 PDF 页数过多的问题方法一&#xff1a;调整页边距WPS OfficeMicrosoft Excel 方法二&#xff1a;优化页面布局调整列宽和行高使用“页面布局”视图合并单…

python全栈开发是什么?

全栈指掌握多种技能&#xff0c;并能利用多种技能独立完成产品。通俗的说就是与这项技能有关的都会&#xff0c;都能独立完成。 python&#xff0c;因为目前很火&#xff0c;能开发的项目很多。例如&#xff1a;web前端后端&#xff0c;自动化运维&#xff0c;软件、小型游戏开…

八大排序--01冒泡排序

假设有一组数据 arr[]{2&#xff0c;0&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;7} 方法&#xff1a;开辟两个指针&#xff0c;指向如图&#xff0c;前后两两进行比较&#xff0c;大数据向后冒泡传递&#xff0c;小数据换到前面。 一次冒泡后&#xff0c;数组中最大…

【网络篇】计算机网络——应用层详述(笔记)

目录 一、应用层协议原理 1. 进入应用层 2. 网络应用程序体系结构 &#xff08;1&#xff09;客户-服务器体系结构&#xff08;client-server architecture&#xff09; &#xff08;2&#xff09; P2P 体系结构&#xff08;P2P architecture&#xff09; 3. 进程间通讯 …

【GC日志和OOM日志分析】JVM GC日志和OOM Dump文件分析

1 缘起 充电、充电、充电。 增加一些必备的知识&#xff0c;帮助后续使用。 2 配置JVM参数 为分析GC日志以及OOM相关信息&#xff0c;配置JVM参数&#xff0c;分为三个部分&#xff1a; &#xff08;1&#xff09;堆内存&#xff0c;包括年轻代、最大堆内存&#xff1b; &a…

PELT算法

PELT算法的范畴 PELT算法&#xff08;Pruned Exact Linear Time&#xff09;属于时间序列分析和变点检测&#xff08;Change Point Detection&#xff09;范畴的算法。 从更广泛的角度来看&#xff0c;PELT算法还可以归类为以下几类算法的子集&#xff1a; 1. 时间序列分析&…