算法专题:滑动窗口

参考练习习题总集

文章目录

  • 3. 无重复字符的最长子串
  • 30. 串联所有单词的子串
  • 76. 最小覆盖子串
  • 187. 重复的DNA序列
  • 219. 存在重复元素 II
  • 220. 存在重复元素 III
  • 396. 旋转函数
  • 424. 替换后的最长重复字符
  • 438. 找到字符串中所有字母异位词

滑动窗口太简单了,没啥说的自己做吧。

3. 无重复字符的最长子串

class Solution {
public:int lengthOfLongestSubstring(string s) {if (s.size()==0) return 0;unordered_map<char,int> zd;zd[s[0]]=0;int max_len=1;for (int i=1;i<s.size();i++)if (zd.find(s[i])==zd.end()) zd[s[i]]=i;else{int x=my_min(zd);if (i-x>max_len) max_len=i-x;dlt(zd,zd[s[i]]);zd[s[i]]=i;}if (zd.size()>max_len) max_len=zd.size();return max_len;}int my_min(unordered_map<char,int> & zd){int x=5*pow(10,4)+1;for (unordered_map<char,int>::iterator zz=zd.begin();zz!=zd.end();zz++)if (zz->second<x) x=zz->second;return x;}void dlt(unordered_map<char,int> & zd,int x){vector<char> lt;for (unordered_map<char,int>::iterator zz=zd.begin();zz!=zd.end();zz++)if (zz->second<x) lt.push_back(zz->first);for (vector<char>::iterator zz=lt.begin();zz!=lt.end();zz++)zd.erase(*zz);}
};

30. 串联所有单词的子串

class Solution {
public:int word_len;unordered_map<string,int> zd;vector<int> findSubstring(string s, vector<string>& words) {vector<int> result;int length=words.size()*words[0].size();if (s.size()<length) return result;unordered_map<char,int> zd1,zd2;for (int i=0;i<words.size();i++)for (int j=0;j<words[i].size();j++){if (zd1.find(words[i][j])==zd1.end()) zd1[words[i][j]]=0;zd1[words[i][j]]+=1;}for (int i=0;i<length;i++){if (zd2.find(s[i])==zd2.end()) zd2[s[i]]=0;zd2[s[i]]+=1;}word_len=words[0].size();for (int i=0;i<words.size();i++){if (zd.find(words[i])==zd.end()) zd[words[i]]=0;zd[words[i]]+=1; }string temp;temp=s.substr(0,length);if (zd1==zd2 and func(temp,zd)) result.push_back(0);for (int i=1;i<s.size()-length+1;i++){zd2[s[i-1]]-=1;if (zd2[s[i-1]]==0) zd2.erase(s[i-1]);if (zd2.find(s[i+length-1])==zd2.end()) zd2[s[i+length-1]]=0;zd2[s[i+length-1]]+=1;temp=s.substr(i,length);if (zd1==zd2 and func(temp,zd)) result.push_back(i);}return result;}bool func(const string & s,unordered_map<string,int> zd){for (int i=0;i<s.size();i+=word_len){string temp=s.substr(i,word_len);if (zd.find(temp)==zd.end()) return false;zd[temp]-=1;if (zd[temp]==0) zd.erase(temp);}return true;}
};

76. 最小覆盖子串

class Solution {
public:string minWindow(string s, string t) {string result;unordered_map<char,int> zd;for (int i=0;i<t.size();i++){if (zd.find(t[i])==zd.end()) zd[t[i]]=0;zd[t[i]]+=1;}vector<pair<char,int>> lb;for (int i=0;i<s.size();i++)if (zd.find(s[i])!=zd.end())lb.push_back({s[i],i});if (lb.size()<t.size()) return result;for (int i=0;i<t.size();i++)zd[lb[i].first]-=1;int l=0,r=t.size();while (!check(zd)){if (r>=lb.size()) return result;zd[lb[r].first]-=1;r+=1;}while (zd[lb[l].first]+1<=0){zd[lb[l].first]+=1;l+=1;}result=s.substr(lb[l].second,lb[r-1].second-lb[l].second+1);while (1){zd[lb[l].first]+=1;l+=1;while (zd[lb[l-1].first]>0){if (r>=lb.size()) return result;zd[lb[r].first]-=1;r+=1;}if (lb[r-1].second-lb[l].second+1<result.size())result=s.substr(lb[l].second,lb[r-1].second-lb[l].second+1);}return result;}bool check(const unordered_map<char,int> & zd){for (auto zz=zd.begin();zz!=zd.end();zz++)if (zz->second>0) return false;return true;}
};

187. 重复的DNA序列

class Solution {
public:vector<string> findRepeatedDnaSequences(string s) {vector<string> lb;if (s.size()<=10) return lb;unordered_map<string,int> zd;string s_new=s.substr(0,10);zd[s_new]=1;for (int i=10;i<s.size();i++){s_new.erase(0,1);s_new+=s[i];if (zd.find(s_new)==zd.end()) zd[s_new]=1;else{if (zd[s_new]==1) lb.push_back(s_new);zd[s_new]+=1;}}return lb;}
};

219. 存在重复元素 II

直接暴力

class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {for (int i=0;i<nums.size();i++)for (int j=i+1;j<=i+k and j<nums.size();j++)if (nums[i]==nums[j]) return 1;return 0;}
};

220. 存在重复元素 III

首次碰见这种思想,我就直接抄的题解
又学到了一种思想

class Solution {
public:int size;bool containsNearbyAlmostDuplicate(vector<int>& nums, int indexDiff, int valueDiff) {size=valueDiff+1;unordered_map<int,int> zd;for (int i=0;i<nums.size();i++) {int u=nums[i],idx=getIdx(u);if (zd.find(idx)!=zd.end()) return true;int l=idx-1,r=idx+1;if (zd.find(l)!=zd.end() and abs(u-zd[l])<=valueDiff) return true;if (zd.find(r)!=zd.end() and abs(u-zd[r])<=valueDiff) return true;zd[idx]=u;if (i>=indexDiff) zd.erase(getIdx(nums[i-indexDiff]));}return false;}int getIdx(int u) {return u>=0?u/size:(u+1)/size-1;}
};

396. 旋转函数

class Solution {
public:int maxRotateFunction(vector<int>& nums) {int count=0;for (int x:nums) count+=x;int f0=0;for (int i=0;i<nums.size();i++)f0+=i*nums[i];int result=f0;for (int i=1;i<nums.size();i++){f0=f0+count-nums[nums.size()-i]*nums.size();if (f0>result) result=f0;}return result;}
};

424. 替换后的最长重复字符

我好菜啊

class Solution {
public:int characterReplacement(string s, int k) {int l=0,r=0,result=-1,result_temp;unordered_map<char,int> zd;while (r!=s.size()){while (1){if (r-l<k+1) break;char temp=find_max_char(zd);if (r-l-zd[temp]<k) break;if (s[r]==temp) break;l+=1;zd[s[l-1]]-=1;if (zd[s[l-1]]==0) zd.erase(s[l-1]);}if (zd.find(s[r])==zd.end()) zd[s[r]]=0;zd[s[r]]+=1;r+=1;result_temp=r-l;if (result_temp>result) result=result_temp;}return result;}char find_max_char(unordered_map<char,int> & zd){char result=zd.begin()->first;for (auto zz=++zd.begin();zz!=zd.end();zz++)if (zz->second>zd[result])result=zz->first;return result;}
};

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

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> lb;if (s.size()<p.size()) return lb;unordered_map<char,int> zd1,zd2;for (int i=0;i<p.size();i++){if (zd1.find(p[i])==zd1.end()) zd1[p[i]]=0;zd1[p[i]]+=1;if (zd2.find(s[i])==zd2.end()) zd2[s[i]]=0;zd2[s[i]]+=1;}if (zd1==zd2) lb.push_back(0);for (int i=1;i<s.size()-p.size()+1;i++){zd2[s[i-1]]-=1;if (zd2[s[i-1]]==0) zd2.erase(s[i-1]);if (zd2.find(s[i-1+p.size()])==zd2.end()) zd2[s[i-1+p.size()]]=0;zd2[s[i-1+p.size()]]+=1;if (zd1==zd2) lb.push_back(i);}return lb;}
};

就做到这里吧。

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

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

相关文章

信号的处理机制

信号的处理机制 信号的来源信号的处理方式注册信号处理函数信号的未决和阻塞实时信号实时信号的特性使用实时信号注意事项 为什么需要可重入的信号处理函数可重入函数的特性例子在信号处理中保持可重入性 Unix/Linux系统中的信号处理机制提供了一种方式&#xff0c;允许操作系统…

ip、子网掩码和A、B、C段

文章目录 概要ip和子网掩码的关系如何进一步理解两者之间关系示例问题根据IP地址和子网掩码求网络号、主机号A段、B段、C段 概要 ip、子网掩码、C段相关知识 ip和子网掩码的关系 IP地址和子网掩码在网络中密切关联&#xff0c;共同用于确定一个设备属于哪个网络以及如何划分网…

text-generation-webui搭建大模型运行环境与踩坑记录

text-generation-webui搭建大模型运行环境 text-generation-webui环境初始化准备模型启动项目Bug说明降低版本启动项目 text-generation-webui text-generation-webui是一个基于Gradio的LLM Web UI开源项目&#xff0c;可以利用其快速搭建部署各种大模型环境。 环境初始化 下载…

python数据容器之列表相关的操作

列表是Python中最常用的数据容器之一&#xff0c;它可以存储多个元素&#xff0c;并且可以进行增加、删除、修改、查找等操作。下面是一些常见的列表操作&#xff1a; 创建列表&#xff1a;使用方括号 [] 或者 list() 函数来创建一个列表。例如&#xff1a; fruits [apple, …

【漏洞复现】EPON上行A8-C政企网关未授权下载漏洞

Nx01 产品简介 EPON上行A8-C政企网关是一款终端产品&#xff0c;提供企业网络解决方案。 Nx02 漏洞描述 EPON上行A8-C政企网关配置文件未授权下载漏洞&#xff0c;攻击者在未授权状态下下载配置文件&#xff0c;获取配置文件内敏感信息。 Nx03 产品主页 fofa-query: "Z…

Retinexformer论文精读笔记

Retinexformer论文精读笔记 论文为2023年ICCV的Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement。论文链接&#xff1a;browse.arxiv.org/pdf/2303.06705.pdf&#xff0c;代码链接&#xff1a;caiyuanhao1998/Retinexformer: “Retinexfo…

Mac 下载安装Java、maven并配置环境变量

下载Java8 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 根据操作系统选择版本 没有oracle账号需要注册、激活登录 mac直接选择.dmg文件进行下载&#xff0c;下载后安装。 默认安装路径&#xff1a;/Library/Java/JavaVirtualMachines/jdk-1…

【C#】.net core 6.0 创建默认Web应用,以及默认结构讲解,适合初学者

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

Redis面试题44

人工智能是否有可能取代人类工作岗位&#xff1f; 答&#xff1a;人工智能在某些领域可能会取代一些人类工作岗位&#xff0c;但同时也会创造新的工作岗位。以下是一些关于人工智能是否取代人类工作岗位的观点&#xff1a; 替代观点&#xff1a;人工智能的发展和应用可能导致一…

标注工具体积3D数据集

史上最全 | 计算机视觉2D/3D标注工具汇总&#xff01; 3D点云标注有哪些好用的开源工具 https://www.appen.com.cn/blog/3d-annotation-tool/ 3D LABELING TOOLBOX 超全的3D视觉数据集汇总 常用的图像标注工具汇总 OpenCV探索之路&#xff08;二十五&#xff09;&#xf…

SpringCloud-创建多模块项目

在微服务架构中&#xff0c;项目的组织结构对于代码的维护和团队的协作至关重要。Spring Cloud作为一个强大的微服务框架&#xff0c;提供了丰富的功能和组件&#xff0c;同时也支持多模块项目的创建&#xff0c;使得代码结构更加清晰、易于管理。本文将介绍如何使用 Spring Cl…

C语言-二分查找

引言 在1个升序的数组中查找指定的数字n&#xff0c;很容易想到的办法就是遍历数组&#xff0c;但是这种方法效率较低。此时可以使用二分查找&#xff0c;二分查找适合有序或排序过的数组 目录 引言 什么是二分查找&#xff1f; 引言题目代码 为什么两个公式等价 二分查…

用easyx做的消除字母游戏《字母消除大师》,快来看看吧

《字母消除大师》游戏介绍 游戏简介: 《字母消除大师》是一款简单而富有挑战性的休闲游戏。游戏中,玩家需要快速准确地按下屏幕上随机出现的英文字母,以消除它们。随着游戏的进行,字母下落的速度会逐渐加快,考验玩家的反应速度和手眼协调能力。 游戏特色: 简洁直观的…

HTML5+CSS3+移动web——HTML 基础

目录 一、标签语法 HTML的基本框架 1. 标题标签 2. 段落标签 3. 换行和水平线 4. 文本格式化标签 5. 图像标签 6. 路径 相对路径 绝对路径 7. 超链接标签 8. 音频 9. 视频 10. 注释 二、标签结构 一、标签语法 HTML 超文本标记语言——HyperText Markup Langua…

powershell 接收一个端口udp数据复制转发到多个目的

在 PowerShell 中&#xff0c;复制并转发 UDP 数据到多个目的地需要一些额外的处理&#xff0c;因为 UDP 是无连接的协议&#xff0c;没有像 TCP 那样的持久连接。因此&#xff0c;你不能像 TCP 那样简单地“接受”一个连接&#xff0c;而是需要监听 UDP 数据包&#xff0c;然后…

在Python中的闭包是什么

目录 1. 闭包的定义 2. 如何形成闭包 3. 闭包的工作原理 4. 使用场景 5. 注意事项 代码示例 总结 闭包&#xff08;Closure&#xff09;在Python中是一个非常有趣且强大的概念&#xff0c;它允许数据隐藏和封装&#xff0c;同时提高了代码的模块性和重用性。本文将从以下…

Kubernetes基础(十四)-k8s网络通信

1 k8s网络类型 2 Pod网络 2.1 同一pod内不同容器通信 Pod是Kubernetes中最小的可部署单元&#xff0c;它是一个或多个紧密关联的容器的组合&#xff0c;这些容器共享同一个网络命名空间和存储卷&#xff0c;因此Pod中的所有容器都共享相同的网络命名空间和IP地址——PodIP&a…

成员对象与封闭类

1. 成员对象与封闭类 类里有其他对象则该对象叫成员对象&#xff1b;有成员对象的类叫 封闭类&#xff1b;上例中&#xff0c;如果CCar类不定义构造函数&#xff0c;则会使用默认的无参构造函数&#xff0c;那么下面的语句会编译出错: 因为编译器不明白CCar类中的tyre成员对象…

C语言:函数

创作不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; 一、函数的概念 数学中我们见过函数的概念&#xff0c;例如ykxb&#xff0c;k和b都是常数&#xff0c;给任意一个x就可以得到y 而C语言也引入了函数&#xff08;function&#xff09;这个概念&#xff0c;C语…

LeetCodeLCR 114. 火星词典——拓扑排序

文章目录 一、题目二、题解 一、题目 现有一种使用英语字母的外星文语言&#xff0c;这门语言的字母顺序与英语顺序不同。 给定一个字符串列表 words &#xff0c;作为这门语言的词典&#xff0c;words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还…