算法专题二:滑动窗口

算法专题二:滑动窗口

  • 一.长度最小的子数组:
    • 1.思路一:暴力解法
    • 2.思路二:滑动窗口+双指针
    • 3.GIF题目解析:
      • 思路一:
      • 思路二:
  • 二.无重复字符的最长子串:
    • 1.思路一:滑动窗口
    • 2.GIF题目解析:
      • 思路一:
  • 三.最大连续1的个数:
    • 1.思路一:滑动窗口
    • 2.GIF题目解析:
  • 四:将x减小到0的最小操作数:
    • 1.思路一:滑动窗口
    • 2.GIF题目解析:
  • 五.水果成篮
    • 1.思路一:滑动窗口
    • 2.GIF题目解析:
  • 六. 找到字符串中的所有字母的异位词
    • 1.思路一:滑动窗口
    • 2.思路二:滑动窗口(比较优化)
    • 2.GIF题目解析:
  • 七.串联所有单词的子串
    • 1.思路一:滑动窗口 + 哈希映射:
    • 2.GIF题目解析:
  • 八.最小覆盖子串
    • 1.思路一:暴力解法+哈希表
    • 2.思路二:滑动窗口+哈希表
    • 2.GIF题目解析:

一.长度最小的子数组:

在这里插入图片描述
长度最小的子数组

1.思路一:暴力解法

在这里插入图片描述

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int num = 100000;int value = 0;int n = nums.size();for (int i = 0; i < n; i++){int sum = 0;for (int j = i; j < n; j++){sum += nums[j];if (sum >= target){value = sum;if (value >= target && num >= (j - i + 1)){num = (j - i + 1);}}}}if (num != 100000)return num;return 0;}
};

2.思路二:滑动窗口+双指针

在这里插入图片描述

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int sum = 0;int len = INT_MAX;for(int left=0,right=0;right<nums.size();right++){sum+=nums[right];while(sum>=target){int len_1 = right-left+1;if(len_1 < len)len = len_1;sum-=nums[left++];}}return (len==INT_MAX? 0 : len);}
};

3.GIF题目解析:

思路一:

在这里插入图片描述

思路二:

在这里插入图片描述

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

在这里插入图片描述

无重复字符的最长子串

1.思路一:滑动窗口

在这里插入图片描述

class Solution {
public:int lengthOfLongestSubstring(string s) {int len = 0;int hash[128]={0};for(int left=0,right=0;right<s.size();right++){ hash[s[right]]++;while(hash[s[right]]>1){hash[s[left]]--;left++;  }len = max(len,(right-left+1));}return len;}
};

2.GIF题目解析:

思路一:

在这里插入图片描述

三.最大连续1的个数:

在这里插入图片描述

最大连续1的个数

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;}
};

2.GIF题目解析:

开头位0 并且k为0算是一个特殊的情况这样的情况有一些考虑就走不出去前面的0而忽略到后面数组自带1,走不到这些1数据导致记录连续1的个数出问题!

在这里插入图片描述

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

在这里插入图片描述

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

1.思路一:滑动窗口

在这里插入图片描述

class Solution {
public:int minOperations(vector<int>& nums, int x) {int sum_1 = 0;vector<int>::iterator it_1 = nums.begin();while (it_1 != nums.end()){sum_1 += (*it_1);it_1++;}int n = nums.size();int target = sum_1 - x;if(target <= 0){if(target<0)return -1;elsereturn n;}//1.滑动窗口:int sum_2 = 0;int ret = 0;for (int left = 0, right = 0; right < n; right++){sum_2 += nums[right];while (sum_2 >= target){if(sum_2 == target)ret = max(ret, (right - left) + 1);sum_2 -= nums[left];left++;}if(sum_2 == target)ret = max(ret, (right - left) + 1);}return (ret==0? -1:n-ret);}
};

2.GIF题目解析:

在这里插入图片描述

五.水果成篮

在这里插入图片描述

水果成篮

1.思路一:滑动窗口

在这里插入图片描述

class Solution {
public:int totalFruit(vector<int>& fruits) {int Hash[100001]={0};int n = fruits.size();int len = 0;for(int left=0,right=0,zero=0;right<n;right++){if(Hash[fruits[right]]==0){Hash[fruits[right]]++;zero++;}else{Hash[fruits[right]]++;}while(zero > 2){Hash[fruits[left]]--;if(Hash[fruits[left++]]==0)zero--;}len = max(len , (right-left)+1);}return len;}
};

2.GIF题目解析:

在这里插入图片描述

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

在这里插入图片描述

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

1.思路一:滑动窗口

在这里插入图片描述

class Solution {
public:vector<int> findAnagrams(string s, string p) {int hash1[26]={0};int len = p.size();for(auto ch:p){hash1[ch -'a']++;}int hash2[26]={0};vector<int> vv;for(int left=0,right=0;right<s.size();right++){hash2[s[right] - 'a']++;if((right-left+1) == len){//1.判断是否相等int flag = 0;for(int i=0;i<26;i++){if(hash1[i] != hash2[i]){flag = -1;break;}}if(flag!=-1)vv.push_back(left);hash2[s[left] - 'a']--;left++;}}return vv;}
};

2.思路二:滑动窗口(比较优化)

1.我们有注意到一个问题在比较相等确定left可不可以push的时候去优化一下26次循环比较的过程。
2.可以给一个变量去控制数量的变化。

class Solution {
public:vector<int> findAnagrams(string s, string p) {int hash1[26]={0};int len = p.size();for(auto ch:p){hash1[ch -'a']++;}int hash2[26]={0};vector<int> vv;for(int left=0,right=0,count=0;right<s.size();right++){//hash2[s[right] - 'a']++;if(++hash2[s[right] - 'a'] <= hash1[s[right] - 'a'])count++;if((right-left+1) > len){char out = s[left++];//出去窗口:if(hash2[out-'a']-- <= hash1[out-'a'])count--;}if(count == len) vv.push_back(left);}return vv;}
};

2.GIF题目解析:

请添加图片描述

七.串联所有单词的子串

在这里插入图片描述

串联所有单词的子串

1.思路一:滑动窗口 + 哈希映射:

在这里插入图片描述

在这里插入图片描述

class Solution {
public:vector<int> findSubstring(string s, vector<string>& words) {vector<int> ret;unordered_map<string,int> hash1;for(auto& s:words)hash1[s]++;int len = words[0].size();int m  =words.size();for(int i=0;i<len;i++)//防止重复情况的出现{unordered_map<string,int> hash2;for(int left=i,right=i,count=0;right+len<=s.size();right+=len){string in = s.substr(right,len);hash2[in]++;//1,进入窗口 + 维护countif(hash1.count(in) && hash2[in] <= hash1[in])count++;if((right-left+1) > (len*m)){//2.出去窗口 + 维护countstring out = s.substr(left,len);if(hash1.count(out) && hash2[out] <= hash1[out])count--;hash2[out]--;left+=len;}//3.数据更新:if(count == m) ret.push_back(left);}}return ret;}
};

2.GIF题目解析:

请添加图片描述

八.最小覆盖子串

在这里插入图片描述

最小覆盖子串

1.思路一:暴力解法+哈希表

在这里插入图片描述

class Solution {
public:string minWindow(string s, string t) {int hash1[128] = { 0 };for (char ch : t){hash1[ch]++;}int kind = t.size();int len = INT_MAX;int begin = 0;for (int i = 0; i < s.size(); i++){int hash2[128] = { 0 };int count = 0;for (int j = i; j < s.size(); j++){if (hash2[s[j]]++ < hash1[s[j]] && hash1[s[j]]!=0)count++;if (kind == count){//更新数据:if (j - i + 1 <= len){len = j - i + 1;begin = i;}}}}string vv("");if (kind > s.size() || len == INT_MAX)return vv;vv = s.substr(begin, len);return vv;}
};

在这里插入图片描述

2.思路二:滑动窗口+哈希表

在这里插入图片描述

class Solution {
public:string minWindow(string s, string t) {int hash1[128] = { 0 };int kind = 0;for (char ch : t){if(hash1[ch]++ == 0)kind++;}int len = INT_MAX;int begin = -1;int hash2[128] = { 0 };for (int left = 0, right = 0, count = 0; right < s.size(); right++){//1.进入窗口+维护countchar in = s[right];if(++hash2[in] == hash1[in])count++;//2.判断出窗口+维护countwhile(count == kind){if(right-left+1 < len){len = right-left+1;begin = left;}char out = s[left++];if(hash2[out]-- == hash1[out])count--;}}if(begin == -1)return "";elsereturn s.substr(begin,len);}
};

2.GIF题目解析:

在这里插入图片描述

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

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

相关文章

Android-----AndroidManifests.xml 之meta-data

一、概念 meta-data&#xff1a;元数据、文件元数据。主要用来定义一些组件相关的配置值。 metadata是一组供父组件使用的名值对&#xff08;name-value pair&#xff09;&#xff0c;一个组件元素可以包含任意数量的meta-data子元素。这些子元素的值存放在一个 Bundle 对象中…

【具身智能评估9】Open X-Embodiment: Robotic Learning Datasets and RT-X Models

论文标题&#xff1a;Open X-Embodiment: Robotic Learning Datasets and RT-X Models 论文作者&#xff1a;– 论文原文&#xff1a;https://arxiv.org/abs/2310.08864 论文出处&#xff1a;– 论文被引&#xff1a;–&#xff08;12/18/2023&#xff09; 论文代码&#xff1a…

轻量封装WebGPU渲染系统示例<53>- 多盏灯灯光照在地面的效果

WebGPU实时渲染实现模拟多盏灯的灯光照在地面的效果灯光效果 。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/MultiLightsTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源…

2018年第七届数学建模国际赛小美赛B题世界杯足球赛的赛制安排解题全过程文档及程序

2018年第七届数学建模国际赛小美赛 B题 世界杯足球赛的赛制安排 原题再现&#xff1a; 有32支球队参加国际足联世界杯决赛阶段的比赛。但从2026年开始&#xff0c;球队的数量将增加到48支。由于时间有限&#xff0c;一支球队不能打太多比赛。因此&#xff0c;国际足联提议改变…

计网02-计算机网络参考模型

一、OSI七层参考模型 1、分层的思想 分层模型用于网络协议的设计方法&#xff0c;本质是将网络节点间复杂的通信问题分成若干简单的问题逐一解决&#xff0c;通过网络的层次去找问题&#xff0c;将复杂问题简单化。 2、OSI参考模型 由于早期计算机厂商使用的是私有的网络模…

【PHP入门】2.1-运算符

-运算符- 运算符&#xff1a;operator&#xff0c;是一种将数据进行运算的特殊符号&#xff0c;在PHP中一共有十种运算符之多。 2.1.1赋值运算符 赋值运算&#xff1a;符号是“”&#xff0c;表示将右边的结果&#xff08;可以是变量、数据、常量和其它运算出来的结果&#…

scroll-behavior属性使用方法

定义和用法&#xff1a; scroll-behavior 属性规定当用户单击可滚动框中的链接时&#xff0c;是否平滑地&#xff08;具动画效果&#xff09;滚动位置&#xff0c;而不是直线跳转。 <style>element{/* 核心代码 */scroll-behavior: smooth;} </style> 属性值&am…

云原生之深入解析减少Docker镜像大小的优化技巧

一、什么是 Docker&#xff1f; Docker 是一种容器引擎&#xff0c;可以在容器内运行一段代码&#xff0c;Docker 镜像是在任何地方运行应用程序而无需担心应用程序依赖性的方式。要构建镜像&#xff0c;docker 使用一个名为 Dockerfile 的文件&#xff0c;Dockerfile 是一个包…

linux修改用户uid和gid并且修改文件所有权(所属用户及所属用户组)(chown命令、chgrp命令)(批量修改查找并修改文件、目录uid和gid)

文章目录 修改Linux用户UID和GID以及文件所有权1. 修改用户的UID和GID1.1 用户UID和GID的概念1.2 修改用户UID1.3 修改用户GID 2. 修改文件所有权2.1 文件所有权的概念2.2 修改文件所有者&#xff08;chown命令&#xff09;2.3 修改文件所属用户组&#xff08;chgrp命令&#x…

Gitlab仓库推送到Gitee仓库的一种思路

文章目录 Gitlab仓库推送到Gitee仓库的一种思路1、创建Gitee的ssh公钥&#xff08;默认已有Gitlab的ssh公钥&#xff09;2、添加Gitlab远程仓库地址3、添加Gitee远程仓库地址4、拉取Gitlab远程仓库指定分支到本地仓库指定分支&#xff08;以test分支为例&#xff09;5、推送本地…

PyTorch机器学习与深度学习

近年来&#xff0c;随着AlphaGo、无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生&#xff0c;人工智能迎来了新一轮的发展浪潮。尤其是深度学习技术&#xff0c;在许多行业都取得了颠覆性的成果。另外&#xff0c;近年来&#xff0c;Pytorch深度学习框架受…

早期的OCR是怎么识别图片上的文字的?

现在的OCR技术融合了人工智能技术&#xff0c;通过深度学习&#xff0c;无论是识别的准确率还是效果都非常不错&#xff0c;那您知道在早期的OCR是通过什么技术来实现的吗&#xff1f;如果您不知道&#xff0c;那么&#xff0c;就让我来告诉您&#xff1a;它主要是基于字符的几…

【工具使用-Qt】Qt如何查看帮助文档

一&#xff0c;简介 Qt不需要单独下载帮助文档&#xff0c;在安装的时候&#xff0c;就已经帮你下载好了&#xff0c;在目录&#xff1a;安装目录/Qt5.14.2/Docs/目录下了。 二&#xff0c;查看方法 打开IDE&#xff0c;点击“帮助”&#xff1a; 输入想要查找的内容&…

阿里云主导《Serverless 计算安全指南》国际标准正式立项!

日前&#xff0c;在韩国召开的国际电信联盟电信标准分局 ITU-T SG17 全会上&#xff0c;由阿里云主导的《Serverless 计算安全指南》国际标准正式立项成功。 图 1 项目信息 在现今数字化时代&#xff0c;Serverless 计算正逐渐成为云计算的一个新的发展方向&#xff0c;其灵活…

【目标检测】视频输出体积太大?分析视频的编码与码率问题

在做视频目标检测时&#xff0c;发现一个问题&#xff0c;检测输出完的视频时大时小&#xff0c;有时输出体积过大&#xff0c;造成播放器播放时严重卡顿现象。本文就这一情况进行分析&#xff0c;并就该问题提出相关解决方案。 视频基础知识 隔行扫描和逐行扫描 早期电视台在…

恒创:多链路负载均衡是什么意思

多链路负载均衡是一种网络架构技术&#xff0c;它通过将流量分散到多个网络链路上&#xff0c;以提高网络的性能和可靠性。这种技术可以应用于各种场景&#xff0c;如数据中心、云计算、企业网络等。 在多链路负载均衡中&#xff0c;流量被分配到多个网络链路上&#xff0c;以…

【深度学习目标检测】十、基于yolov5的火灾烟雾识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

物联网对接使用蓝牙还是WiFi,应该如何选择?

蓝牙是一种无线技术协议&#xff0c;可促进连接设备之间短距离的数据交换。它依赖于物理邻近性并使用2.400至2.485 GHz之间的UHF&#xff08;超高频&#xff09;无线电波。蓝牙旨在创建个人区域网络&#xff08;PAN&#xff09;并在笔记本电脑、智能手机和外围设备等计算设备之…

Unity SRP 管线【第四讲:URP 阴影】

URP 全文源码解析参照 引入 在UniversalRenderer.cs/ line 505行处 此处已经准备好了所有渲染数据&#xff08;所有数据全部存储在了renderingData中&#xff09; 我们只用renderingData中的数据初设置mainLightShadows bool mainLightShadows m_MainLightShadowCasterPass…

【MAC】M2 安装mysql

一、docker下载地址 下载地址 二、安装docker完成 三、安装mysql 一、拉取镜像 # 拉取镜像 docker pull mysql# 或者 docker pull mysql:latest# 以上两个命令是一致的&#xff0c;默认拉取的就是 latest 版本的# 我们还可以用下面的命令来查看可用版本&#xff1a; docker…