做网站需要什么证明嘛/网站广告费一般多少钱

做网站需要什么证明嘛,网站广告费一般多少钱,来宾建设工程造价网站,动态网站上的查询怎么做文章目录 前言水果成篮思路 找到字符串中所有字母异位词思路 串联所有单词的子串思路 最小覆盖子串思路 总结 前言 本专栏上一篇博客,带着大家从认识滑动窗口到慢慢熟悉 相信大家对滑动窗口已经有了大概的认识 其实主要就是抓住——一段连续的区间 今天来学习一些滑…

在这里插入图片描述

文章目录

  • 前言
  • 水果成篮
    • 思路
  • 找到字符串中所有字母异位词
    • 思路
  • 串联所有单词的子串
    • 思路
  • 最小覆盖子串
    • 思路
  • 总结

前言

本专栏上一篇博客,带着大家从认识滑动窗口到慢慢熟悉
相信大家对滑动窗口已经有了大概的认识
其实主要就是抓住——一段连续的区间
今天来学习一些滑动窗口进阶的题目
fellow me

水果成篮

在这里插入图片描述

思路

一开始看到这个题目,一段连续的区间,想到了滑动窗口
然后就想着怎么维护窗口,每次更新到新的水果种类就要,开始对left++,然后处理数据
其实是有点麻烦的,但是经过半个多小时的调试,最后还是ac了
思路:每次更新两个种类的水果,x,y,如果下一个水果的种类不相符合,就更新新的x,y
这个时候 right - 1 和 right 所对应的水果就是新的两种,然后就是处理从 left 到 right - 1这段区间
符合条件的情况, 也就是 从right - 1 一直往前走,到与 right - 1 所对应种类不同的水果,然后再更新结果
在反复进窗口,维护窗口,出窗口

代码如下 :

class Solution
{
public:int totalFruit(vector<int>& fruits){int ans = 0;int n = fruits.size();int x = fruits[0], y = fruits[0];if (n == 1)return 1;int left = 0, right = 1;for (; right < n; right++){if (fruits[right] != x && fruits[right] != y)  // 和前面确定的水果种类{y = fruits[right - 1];		//  更新新的水果种类  x = fruits[right];int i = right - 1;if (i != left)  // left  到  right - 1  区间  {while (fruits[i] == y && i > left)  //  i一直靠近left  直到种类不同{i--;}if (i == left && y != fruits[left])  //  更新  left 的指向left++;else if (i != left)left = i + 1;}}ans = max(ans, right - left + 1);//    更新结果}return ans;}
};

后面又想到了一种思路:
就是用哈希来统计种类数量,哈希相对于前面的那种方法还是简单的
就是把两个种类的水果放入哈希表,然后right++ 水果进窗口,如果哈希表的水果种类大于2
就从左侧 left 开始逐步出窗口,直到哈希表种类等于2,然后更新结果

代码如下:

class Solution
{
public: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;}
};

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

在这里插入图片描述

思路

看到又是一段连续的区间,就想到了滑动窗口
这一题 p 的异位词,说白了就是包含了 p 的所有字母,不管先后顺序
想到上一题用哈希优化的爽快,这题好像也可以用哈希来解
把 p 中字符都用哈希统计频次,然后在遍历 s 时,进窗口,维护窗口,出窗口
每次进入窗口,就用哈希统计出现次数,只要没有到达次数上限,就进窗口
如果进入窗口的字符数量大于了 p 的长度,维护窗口从left开始往右开始出窗口
每一次统计进入窗口的数量时,都比较一下 p 的字符个数,如果进入窗口的字符个数等于 p的个数大小相等,就更新结果

代码如下:

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

下面就上难度了嗷~~~~

串联所有单词的子串

在这里插入图片描述

思路

这个题目看起来很难,其实一点也不简单,看到困难的标签就让人望而生畏
但其实也没有想象的那么难,慢慢抽丝剥茧,其实也能拿下
在这里插入图片描述
看到这里,其实就想到了上一题的那个字母异位词,本题是说所有单词都包含,然后不管顺序
上一题是——所有字母都包含,然后不管顺序,我们不妨试试上一题的思路呢
首先要解决的就是把单词抽象变成字符,我们可以定义一个 string,映射 int 的 哈希表,这个问题就迎刃而解了
下一个问题就是怎么才能知道哪个是单词的开头字母呢??又怎么在 s 中遍历单词然后进窗口呢??
在这里插入图片描述
我又看到了这个条件,雪中送炭,所有单词长度相等,那岂不是起飞了,就让 right 每次遍历 += 单词长度就好了
这些都处理好了,最后一个问题就是,我怎么知道哪个字符是单词的第一个字母,错乱了怎么办,那不是gg
我们只需要在外面套一层for循环,从0到单词的长度,这段区间都做一次滑动窗口就好啦
核心问题都解决了,剩下的就是一些细节处理问题了
话不多说,这些都解决了,开始执行代码:

class Solution 
{
public:vector<int> findSubstring(string s, vector<string>& words) {vector<int> ret;unordered_map<string, int> hash1; // 保存 words 里面所有单词的频次for (auto& c : words)hash1[c]++;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 + len <= s.size();right += len) {// 进窗口 + 维护 countstring in = s.substr(right, len);hash2[in]++;if (hash1.count(in) && hash2[in] <= hash1[in])count++;// 判断if (right - left + 1 > len * m) {// 出窗口 + 维护 countstring out = s.substr(left, len);if (hash1.count(out) && hash2[out] <= hash1[out])count--;hash2[out]--;left += len;}// 更新结果if (count == m)ret.push_back(left);}}return ret;}
};

其实hard题也是由一个一个小问题糅合起来的,解决核心问题,其实也没有那么难
慢慢啃下来,还是有成就感的 come on

最小覆盖子串

在这里插入图片描述

思路

又又又是一段连续的区间,来吧来吧,滑动窗口,滑动窗口
在这里插入图片描述
这道题不是上一题的恰好涵盖所有字符了,要返回的是最小子串,也就是能包含其他的
但是经过前面题目的磨砺,我感觉好像自己有点门道了
思路:用哈希1统计字符串 t 的每一个字符的频次,还有种类
构造一个新的哈希2,然后遍历 s 字符串,每个字符都统计到新的哈希表
当这个字符的频次和 哈希1中统计的字符频次相等时,种类数++
种类数和哈希1种类数相等时维护窗口,更新结果
大致思路就差不多是这样,来执行代码吧

class Solution 
{
public:string minWindow(string s, string t) {int hash1[128] = {0}; // 统计字符串 t 中每一个字符的频次int kinds = 0;        // 统计有效字符有多少种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 "";elsereturn s.substr(begin, minlen);}
};

这个困难也拿下啦,滑动窗口和哈希一起用感觉有点爽,绝佳组合

总结

滑动窗口的核心在于维护一段连续区间,通过哈希表优化统计与比较过程。面对不同问题需灵活调整:
哈希表记录元素频次,快速判断窗口合法性(如水果种类、异位词)
双指针动态伸缩窗口,确保时间复杂度为O(N)
多层循环处理定长元素(如单词串联),覆盖所有起点情况
种类与频次匹配时更新结果,最小子串问题需全局记录最优解
掌握滑动窗口+哈希的组合,能高效解决子串、子数组等连续区间问题,突破Hard瓶颈

今天的内容就到这里啦,不要走开,小编持续更新中~~~~

在这里插入图片描述

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

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

相关文章

Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析

学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…

2024年12月CCF-GESP编程能力等级认证C++编程一级真题解析

一级真题的难度: ‌ CCF-GESP编程能力等级认证C++编程一级真题的难度适中‌。这些真题主要考察的是C++编程的基础知识、基本语法以及简单的算法逻辑。从搜索结果中可以看到,真题内容包括了选择题、编程题等题型,涉及的内容如C++表达式的计算、基本输入输出语句的理解…

73.HarmonyOS NEXT PicturePreviewImage组件深度剖析:高级功能扩展与性能优化策略(三)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT PicturePreviewImage组件深度剖析&#xff1a;高级功能扩展与性能优化策略(三) 文章目录 HarmonyOS NEXT PicturePreviewImage组件…

六十天前端强化训练之第十七天React Hooks 入门:useState 深度解析

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、知识讲解 1. Hooks 是什么&#xff1f; 2. useState 的作用 3. 基本语法解析 4. 工作原理 5. 参数详解 a) 初始值设置方式 b) 更新函数特性 6. 注意事项 7. 类组…

IEC61850标准下MMS 缓存报告控制块 ResvTms详细解析

IEC61850标准是电力系统自动化领域唯一的全球通用标准。IEC61850通过标准的实现&#xff0c;使得智能变电站的工程实施变得规范、统一和透明&#xff0c;这大大提高了变电站自动化系统的技术水平和安全稳定运行水平。 在 IEC61850 标准体系中&#xff0c;ResvTms&#xff08;r…

G-Star 公益行起航,挥动开源技术点亮公益!

公益组织&#xff0c;一直是社会温暖的传递者&#xff0c;但在数字化浪潮中&#xff0c;也面临着诸多比大众想象中复杂的挑战&#xff1a;项目管理如何更高效&#xff1f;志愿者管理又该如何创新&#xff1f;宣传推广怎么才能更有影响力&#xff1f;内部管理和技术支持又该如何…

京东 h5st 5.1 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 学习了2天某物&#xff0c;f…

CentOS 系统安装 docker 以及常用插件

博主用的的是WindTerm软件链接的服务器&#xff0c;因为好用 1.链接上服务器登入后&#xff0c;在/root/目录下 2.执行以下命令安装docker sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo…

不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析

题目A&#xff1a;日期统计 思路分析&#xff1a; 本题的题目比较繁琐&#xff0c;我们采用暴力加DFS剪枝的方式去做&#xff0c;我们在DFS中按照8位日期的每一个位的要求进行初步剪枝找出所有的八位子串&#xff0c;但是还是会存在19月的情况&#xff0c;为此还需要在CHECK函数…

【redis】set 类型:基本命令

文章目录 基本概念SADD 和 SMEMBERSSCARDSPOPSRANDMEMBERSMOVESREM集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结内部编码 基本概念 谈到一个属于&#xff0c;这个术语可能有多种含义&#xff0c;set 集合设置&#xff08;和 get 相对应&#xff09…

2023华东师范大学计算机复试上机真题

2023华东师范大学计算机复试上机真题 2022华东师范大学计算机复试上机真题 2021华东师范大学计算机复试上机真题 2023华东师范大学计算机复试机试真题 2022华东师范大学计算机复试机试真题 2021华东师范大学计算机复试机试真题 在线评测&#xff1a;传送门&#xff1a;pgcode.…

在线Doc/Docx转换为PDF格式 超快速转换的一款办公软件 文档快速转换 在线转换免费转换办公软件

小白工具https://www.xiaobaitool.net/files/word-pdf/提供了一项非常实用的在线服务——将Doc或Docx格式的文档快速转换为PDF格式。这项服务不仅操作简单&#xff0c;而且转换效率高&#xff0c;非常适合需要频繁处理文档转换的用户。 服务特点&#xff1a; 批量转换&#x…

java学习总结(四)MyBatis多表

一、多表结构 学生表、班级表、课程表、班级课程表 二、一对一 一个学生只属于一个班级。 查询&#xff1a;id name age gender banjiName SELECT s.id,s.name,s.age,s.gender,b.id AS banjiId,b.name AS banjiName FROM student AS s INNER JOIN banji AS b ON s.banji_id…

大语言模型学习及复习笔记(1)语言模型的发展历程

1.大模型进入人们视野 ChatGPT 于2022年11月底上线 模型名称 发布时间 核心突破 GPT-3 2020年6月 首款千亿参数模型&#xff0c;少样本学习 GPT-3.5-Turbo 2022年11月 对话能力优化&#xff0c;用户级应用落地 GPT-4 2023年3月 多模态、强逻辑推理 GPT-4o / GPT-4…

【C#学习】协程等待

来源GPT&#xff0c;仅记录学习 yield return WaitForEndOfFrame() 适用于 渲染结束后再执行代码&#xff0c;但 WebGL 可能不适合这个操作&#xff0c;会拖慢帧率。(渲染得太慢&#xff09; yield return null; 让代码在下一帧的 Update() 里继续运行&#xff0c;更加流畅。 …

从零开始用AI开发游戏(一)

1. 核心玩法设计 核心目标&#xff1a;玩家需在随机生成的3D迷宫中寻找出口&#xff0c;躲避陷阱、收集道具、解开谜题。核心机制&#xff1a; 随机生成迷宫&#xff1a;每次游戏生成不同结构的迷宫&#xff08;递归分割算法或深度优先搜索&#xff09;。第一人称视角&#xf…

基于ssm的宠物医院信息管理系统(全套)

一、系统架构 前端&#xff1a;html | layui | vue | element-ui 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat | idea | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页…

cursor使用

引入私有文档 设置-> Features->下滑找到Docs url后边多加一个 / 可以拉取url下所有的页面(子页面&#xff0c;子目录)&#xff0c;不加只拉取url当前页面 使用 选择 Docs 回车 选择 文档 直接解析链接 链接 回车 搜索引擎 web 对比git版本差异 git 选择其中一个 g…

嵌入式八股ARM篇

前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…

【C++项目实战】校园公告搜索引擎:完整实现与优化指南

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da;一、项目概述 &#x1f4d6;1.项目背景 &#x1f4d6;2.主要功能 &#x1f4d6;3.界面展…