滑动窗口2

1. 水果成篮(904)

题目描述:
在这里插入图片描述
算法原理:
根据题目意思,friuts表示第i棵树上的水果种类,然后我们有两个篮子去在这些树上去采水果,但是有限制就是一个篮子里就只能装一种水果,也就是我们在根据fruits数组去采摘水果的时候,水果种类达到第三种的时候就立刻停止采摘。
综上我们可以先定义一个hash表,类型为(int,int),第一个序号表示水果的种类,第二个序号表示这种水果在篮子中的总数。此时我们就可以将这里的问题想成滑动窗口问题,根据我们之前总结的滑动窗口的问题,不难发现这里的进窗口就是直接根据fruits数组放入水果的过程,当hash表的size也就是水果种类大于2时,就开始出窗口,对于出窗口的过程首先将fruit[left]对应得水果种类在hash表中的数量减一,然后注意如果此时对应种类的水果数量为0那么就要在hash表中移除这种水果也就是hash表的size减一,最后照旧left++,然后重复上述出窗口的操作,直至篮子中的水果种类等于二时跳出,此时篮子中的水果就是满足题目条件的,因此我们就可以去更新返回值也就是篮子中水果的最大数目。具体看代码。
代码如下:

class Solution {public int totalFruit(int[] fruits) {int n = fruits.length;int ret = 0;Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int left = 0, right = 0; right < n; right++) {int in = fruits[right];map.put(in, map.getOrDefault(in, 0) + 1);while (map.size() > 2) {int out = fruits[left];map.put(out, map.get(out) - 1);if (map.get(out) == 0) {map.remove(out);}left++;}ret = Math.max(ret, right - left + 1);}return ret;}
}

题目链接

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

题目描述:
在这里插入图片描述
算法原理:
首先明白题目给出的异位词是什么意思,举例来说就是"abc"和"bac"互为异位词,就是说一个字符串如果是另一个字符串打乱顺序后的结果就是它的异位词,很好理解。
然后题目要求我们去在字符串s的子串中去找到字符串p的异位词,理解了以上内容我们就可以使用滑动窗口的方法去解决这个问题。
我们先使用一个数组来记录字符串p的各个字符的数量,然后开始基于字符串s来进行进窗口的操作,也是使用一个数组来记录各个进窗口的字符数量,当进窗口的字符数量超过字符串p中的字符数量时开始出窗口,首先对数组中的s[left]对应字符的数量减一,之后left++,当窗口内的字符数量恢复到p中的字符数量时跳出循环,然后判断,p字符串的保存各字符数量的数组和此时保存窗口内各字符数量的数组是否相等,如果相等那么此时就更新结果,也就是更新返回的起始索引,即窗口左边的索引。
代码如下:

class Solution {public List<Integer> findAnagrams(String ss, String p) {List<Integer> ret = new ArrayList<>();int[] arrP = new int[26];int[] arrS = new int[26];char[] s = ss.toCharArray();for (char ch : p.toCharArray()) {arrP[ch - 'a']++;}int n = ss.length();int m = p.length();for (int left = 0, right = 0; right < n; right++) {arrS[s[right] - 'a']++;while (right - left + 1 > m) {arrS[s[left++] - 'a']--;}if (Arrays.equals(arrP, arrS)) {ret.add(left);}}return ret;}
}

优化:
当我们使用数组比较这种方法来验证是否当前窗口下的字符构成字符串p的异位词时,虽然代码是可以直接使用Arrays类的静态方法equals来比较,但是内部肯定是需要一个循环来实现的,因此我们对代码进行优化。
相对于前面的代码,这里优化的代码只需要加上一个count变量,这是用来记录窗口内的有效字符数量。那么什么是有效字符,就是在字符串p中包含的字符,但是一旦加入窗口中的单种字符个数超过字符串p中的对应的字符数量,那么这个字符也不是有效字符。例如字符串p为"abc"此时窗口内字符为"aab"此时有效字符数量为2。
因此在进窗口时对s[right]进行判断,是否此时窗口内该字符的数量在加一后是小于等于p字符串中相同字符的数量的,只有这样count才能加一。当窗口内的字符数量超出字符串p的字符数量时开始出窗口,此时也要进行判断是否s[left]出窗口后,窗口内的对应字符数量是否小于p中相同字符的数量,如果小于count才能减一。跳出出窗口循环后就进行判断,是否此时窗口内有效字符数量count和p字符长度相等,如果相等就说明窗口内字符是p的异位词,更新返回结果。
优化后代码:

class Solution {public List<Integer> findAnagrams(String ss, String p) {List<Integer> ret = new ArrayList<>();int[] arrP = new int[26];int[] arrS = new int[26];char[] s = ss.toCharArray();int count = 0;for (char ch : p.toCharArray()) {arrP[ch - 'a']++;}int n = ss.length();int m = p.length();for (int left = 0, right = 0; right < n; right++) {arrS[s[right] - 'a']++;if (arrS[s[right] - 'a'] <= arrP[s[right] - 'a']) {count++;}while (right - left + 1 > m) {arrS[s[left] - 'a']--;if (arrS[s[left] - 'a'] < arrP[s[left] - 'a']) {count--;}left++;}if (count == m) {ret.add(left);}}return ret;}
}

题目链接

3. 串联所有单词的子串(30)

题目描述:
在这里插入图片描述

算法原理:
这一题和上一题异位词如出一辙,做题的思想完全一致,只不过上一题进窗口出窗口的单位是字符,这一题则是一个子串,也是用到了上一题当中的优化的使用count计数的方法。然后需要注意一个不一样的点就是,因为每次进窗口出窗口的字符串单位不一定是总的字符串s的因子,所以为了遍历各种可能我们需要在最外层再多套上一层循环,具体看代码。
代码如下:

class Solution {public List<Integer> findSubstring(String s, String[] words) {int len = words[0].length();int aim = words.length;List<Integer> list = new ArrayList<>();HashMap<String, Integer> hash = new HashMap<>();for (String str : words) {hash.put(str, hash.getOrDefault(str, 0) + 1);}int n = s.length();for (int i = 0; i < len; i++) {HashMap<String, Integer> temp = new HashMap<>();for (int left = i, right = i, count = 0; right + len <= n; right += len) {String in = s.substring(right, right + len);temp.put(in, temp.getOrDefault(in, 0) + 1);if (hash.getOrDefault(in, 0) != 0 && temp.get(in) <= hash.get(in)) {count++;}while (right - left + 1 > aim * len) {String out = s.substring(left, left + len);temp.put(out, temp.get(out) - 1);if (hash.getOrDefault(out, 0) != 0 && temp.get(out) < hash.get(out)) {count--;}left += len;}if (count == aim) {list.add(left);}}}return list;}
}

题目链接

4. 最小覆盖子串(76)

题目描述:
在这里插入图片描述

算法原理:
还是根据第二题异位词的方法,使用count计数的方式来完成这题,但是与前者不同的在于前者要求满足的子串必须每一个字符及其数量和t要一一对应,但是这一题不一样,它只需要将t的各个字符包含进子串即可,因此我们这里选择使用count来表达字符的种类,当窗口内的相应的字符种类达到要求时就进入出窗口的循环。对于返回值的更新直接放到出窗口循环当中了,因为此时的窗口范围的子串都是满足题目条件的直接更新就可以了。
代码如下:

class Solution {public String minWindow(String ss, String tt) {Map<Character, Integer> hash1 = new HashMap<>();Map<Character, Integer> hash2 = new HashMap<>();char[] s = ss.toCharArray();char[] t = tt.toCharArray();for (char ch : t) {hash1.put(ch, hash1.getOrDefault(ch, 0) + 1);}int n = ss.length();int aim = hash1.size();int minL = Integer.MAX_VALUE;int begin = -1;for (int left = 0, right = 0, count = 0; right < n; right++) {char in = s[right];hash2.put(in, hash2.getOrDefault(in, 0) + 1);if (hash1.containsKey(in) && hash1.get(in).equals(hash2.get(in))) {count++;}while (count == aim) {if ((right - left + 1) < minL) {minL = right - left + 1;begin = left;}char out = s[left];hash2.put(out, hash2.get(out) - 1);if (hash1.containsKey(out) && hash2.get(out) < hash1.get(out)) {count--;}left++;}}return begin == -1 ? "" : ss.substring(begin, begin + minL);}
}

题目链接

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

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

相关文章

矩阵运算在数据分析中的应用

矩阵运算在数据分析中的应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 矩阵运算作为数学和计算机科学中的重要概念&#xff0c;在数据分析和科学计算中发…

elasticsearch源码分析-03选举集群状态

选举集群状态 es中存储的数据有一下几种&#xff0c;state元数据、lucene索引文件、translog事务日志 元数据信息可以分为&#xff1a; 集群层面的元信息-对应着metaData数据结构&#xff0c;主要是clusterUUid、settings、templates等索引层面的元信息-对应着indexMetaData数…

RK35x8通过TFTP下载内核到开发板

对于有网线接口的RK35X8开发板&#xff0c;调试时候&#xff0c;可以通过网线下载内核镜像和设备树到开发板&#xff0c;不用每次修改驱动都要重新打开下载工具&#xff0c;进入下载模式。通过TFTP可以大大提高调试效率。 在ubuntu安装TFTP服务 安装tftp服务器 sudo apt-get…

【面试系列】前端开发工程师高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

Python商务数据分析知识专栏(二)——Python数据分析基础

Python商务数据分析知识专栏&#xff08;二&#xff09;——Python数据分析基础 一、Python数据分析概述二、Numpy数值计算基础专栏二&#xff08;Python数据分析基础&#xff09;的总结 与 专栏三&#xff08;Python数据分析的应用&#xff09;开端 一、Python数据分析概述 二…

【笔记】Spring Cloud Gateway 实现 gRPC 代理

Spring Cloud Gateway 在 3.1.x 版本中增加了针对 gRPC 的网关代理功能支持,本片文章描述一下如何实现相关支持.本文主要基于 Spring Cloud Gateway 的 官方文档 进行一个实践练习。有兴趣的可以翻看官方文档。 由于 Grpc 是基于 HTTP2 协议进行传输的&#xff0c;因此 Srping …

深度学习之Transformer模型的Vision Transformer(ViT)和Swin Transformer

Transformer 模型最初由 Vaswani 等人在 2017 年提出,是一种基于自注意力机制的深度学习模型。它在自然语言处理(NLP)领域取得了巨大成功,并且也逐渐被应用到计算机视觉任务中。以下是两种在计算机视觉领域中非常重要的 Transformer 模型:Vision Transformer(ViT)和 Swi…

git 个人常见错误备注

问题1&#xff1a;all conflict fixed but you are still merging。。。。。 如果你已经解决了所有冲突&#xff0c;但 Git 仍然提示你正在进行合并&#xff0c;可能是因为你还没有完成合并过程。以下是详细步骤&#xff0c;确保你正确完成合并并提交更改&#xff1a; 确认所…

Tongsuo(铜锁)项目介绍 - 实现国密SSL协议

文章介绍 铜锁(Tongsuo)是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算、区块链等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保…

鸿蒙 如何 url decode

在 TypeScript 和 JavaScript 中进行 URL 编码的最简单方式是使用内置的 global 函数 encodeURIComponent()。以下是一个示例&#xff1a; let url "https://example.com/?name测试&job开发者"; let encodedURL encodeURIComponent(url); console.log(encode…

【RAG】FoRAG:面向网络增强型长形式问答的事实性优化RAG

一、解决问题 在基于网络的长形式问答&#xff08;Web-enhanced Long-form Question Answering, LFQA&#xff09;任务中&#xff0c;现有RAG在生成答案时存在的问题&#xff1a; 事实性不足&#xff1a;研究表明&#xff0c;现有系统生成的答案中只有大约一半的陈述能够完全得…

Qt开发笔记:Qt3D三维开发笔记(一):Qt3D三维开发基础概念介绍

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/140059315 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、O…

汇编语言基础教程

汇编语言基础教程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨汇编语言的基础知识和应用&#xff0c;帮助大家理解汇编语言在计算机编程中…

来自Claude官方的提示词库,支持中文!建议收藏!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之…

多元时间序列分析——VAR(向量自回归模型)

VAR模型主要是考察多个变量之间的动态互动关系&#xff0c;从而解释各种经济冲击对经济变量形成的动态影响。这种动态关系可通过格兰杰因果关系、脉冲响应以及方差分解来进一步明确和可视化。VAR模型主要研究内生变量之间的关系&#xff0c;内生变量就是参与模型并由模型体系内…

通天星CMSV6车载监控平台CompanyList信息泄露漏洞

1 漏洞描述 通天星CMSV6车载视频监控平台是东莞市通天星软件科技有限公司研发的监控平台,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。通天星科技应用于公交车车载、校车车载、大巴车车载、物流车载、油品运输车载、警车车…

推荐一款程序员的搞钱神器

你是不是经常为开发环境的搭建而头疼&#xff1f;有没有遇到过因为接口开发而焦头烂额的情况&#xff1f;作为一名程序员&#xff0c;特别是独立开发者&#xff0c;这些问题是不是常常让你觉得心力交瘁&#xff1f;别担心&#xff0c;现在有一个神器&#xff0c;能让你摆脱这些…

五、golang基础之slice和map

文章目录 一、slice&#xff08;一&#xff09;含义&#xff08;二&#xff09;定义切片&#xff08;三&#xff09;切片初始化&#xff08;四&#xff09;len() 和 cap() 函数&#xff08;五&#xff09;空(nil)切片&#xff08;六&#xff09;切片截取&#xff08;七&#xf…

2024HVV最新POC/EXP,目前有8000+个POC/EXP

点击"仙网攻城狮”关注我们哦~ 不当想研发的渗透人不是好运维 让我们每天进步一点点 简介 都是网上收集的POC和EXP&#xff0c;最新收集时间是2024年五月&#xff0c;需要的自取。 表里没有的可以翻翻之前的文章&#xff0c;资源比较零散没有整合起来。 文件链接&#xff…

hexo博客搭建

系列文章目录 文章目录 系列文章目录前言1. 环境配置2. 打包并发布到github仓库3. 生成ssh秘钥4.vscode配置本地与远端相对路径不一致问题总结 前言 本文主要介绍了hexo博客怎么搭建 1. 环境配置 安装git、nodejs、npm创建博客文件夹blogcmd输入命令npm install -g hexo初始化…