尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
一水果成篮题目解析这题的意思就是说有一个数组里面数字就代表一个种类就如fruits [1,2,1]里面就有1水果和2水果这两种水果现在我有两个篮筐并且每个篮筐只能有一个种类的水果并且数量可以无限也就是说我需要在这个数组中找到一个最长的子数组要求是这个子数组里面只能包含两种数字那我们的解题思路首先肯定想到的是通过暴力解法将所有的满足条件的子数组列举出来然后找到一个最长的具体的操作就是定义两个变量left跟rightright向后遍历然后将指到的数据存进一个哈希表中哈希表记录数字种类以及出现的次数如果种类2了那就移动left然后right继续从left的位置开始遍历通过这个暴力解法你肯定也想到了说那我right有必要直接回到left移动后的位置从新向后遍历吗其实可以不用因为我们left向后移有两种情况就是数字种类变小和不变变小的话那肯定不用从头开始遍历不变的话那也不需要只用看看后面的数字种类是什么情况就好了所以我们的right是不需要回退的看到这里有没有想到我们之前的滑动窗口滑动窗口一般也就是两个指针的移动方向是一致的那么我们这题也是这个思路这个思路是我们从暴力解法过渡过来的所以我们之后的解题思想都可以从这个方式来从最简单的暴力解法一步一步进行优化得来更好的解法代码演示class Solution { public static int totalFruit(int[] fruits) { HashMapInteger,Integer hashMapnew HashMap(); int len0; for (int left 0,right0; right fruits.length; right) { //进窗口 int inhashfruits[right]; hashMap.put(inhash,hashMap.getOrDefault(inhash,0)1); //出窗口 while (hashMap.size()2){ int outhashfruits[left]; hashMap.put(outhash,hashMap.get(outhash)-1); if (hashMap.get(outhash)0){ hashMap.remove(outhash); } left; } //更新结果 lenMath.max(len,right-left1); } return len; } }二找到字符串中所有字母的异位词题目解析可以先将字符串转为数组的形式创建两个哈希表其中一个哈希表hash1就放目标字符串里面的字母以及对应的个数信息就相当于是a:1,b:1,c:1然后我们right移动的时候将s[right]的字母加进另一个哈希表hash2中然后维护一个计数count里面记录的是有效的数据也就是如果我第一个是e但是我目标中没有e所以就不进入count里面有效的数据的具体理解也就是当hash[right]hash2[right]我只需要一个a你那里有两个a我也不会记录第二个a当我们的right-left1的长度大于目标的长度的时候我们的left就并且当hash[left]hash2[left]的时候我们count--当countm的时候我们就更新结果当然更进阶就是哈希表换成数组的形式因为字母的个数还是不多的代码演示public static ListInteger findAnagrams(String s, String p) { ListInteger retnew ArrayList(); char[]sss.toCharArray(); char[]ppp.toCharArray(); //先定义第一个数组填入pp的值并且记录下来长度 int[]hash1new int[26]; int[]hash2new int[26]; for (char ch:pp){ hash1[ch-a]; } for (int right 0,left0,count0; right ss.length; right) { //进窗口 char inss[right];//假设ina hash2[in-a];//也就是hash2[0] if (hash1[in - a] hash2[in - a]){ count;//也就是说我可以hash2这个数组中代表a的那个格子数字大于1但是我们count里面的有效数字只能是最准确的有什么和有几个 } //出窗口 if (right-left1pp.length){ char outss[left];//依旧假设outa if (hash1[out-a]hash2[out-a]){ count--; } hash2[out-a]--; left; } // 3. 匹配成功记录起始下标 if (count pp.length) { ret.add(left); } } return ret; }
RELATED

相关推荐

土豆缺陷识别数据集 马铃薯病害缺陷数据集 土豆检测目标检测YOLO数据集 AI训练数据第10819去期

土豆缺陷识别数据集 马铃薯病害缺陷数据集 土豆检测目标检测YOLO数据集 AI训练数据第10819去期

土豆检测目标检测YOLO数据集项目详情任务类型目标检测类别数量5分类类别名称土豆、损伤土豆、缺陷土豆、真菌病害土豆、发芽土豆图片总量8900张数据集划分7:1:2分配 训练集:6230张 验证集:890张 测试集:1780张标注格式YOLO txt格式、VO…

📅 2026/10/22 7:32:13
天津智能装备工厂SolidWorks研发场景10个设计人员共享一台服务器

天津智能装备工厂SolidWorks研发场景10个设计人员共享一台服务器

智能装备行业项目定制化强,设备整机结构复杂,研发人员日常大量使用 SolidWorks 完成零件建模、上千至万件整机大装配、机构运动仿真与工程图输出。传统一人一台独立图形工作站模式,硬件投入高昂,多数时间算力闲置;图纸…

📅 2026/10/22 7:32:13
智慧农业玉米病害识别数据集 玉米叶片斑病数据集 玉米叶片病害实例分割 YOLO数据集第10818期

智慧农业玉米病害识别数据集 玉米叶片斑病数据集 玉米叶片病害实例分割 YOLO数据集第10818期

玉米叶片病害实例分割YOLO数据集项目详情任务类型实例分割类别数量4分类类别名称玉米灰斑病、健康玉米、玉米叶条纹病、玉米大斑病图片总量2500张数据集划分7:1:2分配 训练集:1750张 验证集:250张 测试集:500张标注格式YOLO掩码txt格式…

📅 2026/10/22 7:32:13
MORE NEWS

更多资讯

📰

SpringBoot云课堂在线教育系统:从设计实现到部署答辩全解析

疫情那几年,学校、培训机构和企事业单位对线上授课的需求一下子被推到了台前。很多计算机专业的毕业设计选题也随之转向这个方向,我当时看到不少学生选了"SpringBoot疫情防控下的云课堂在线教育系统"这类题目。说实话,这个题目的技…

📰

虚拟电厂微网日前随机优化调度:源荷不确定性建模与YALMIP求解

简介:一份面向电气工程、电力系统方向毕业设计及研究者使用的虚拟电厂/微网日前随机优化调度源程序,重点解决光伏出力与负荷功率双重不确定条件下的调度决策问题。模型基于随机规划法构建,结合蒙特卡洛算法生成预测场景,并通过快速…

📰

OpenAI模型集成实战:从鉴权到流式输出的完整方案与踩坑记录

直接开工。做“03-OpenAI模型集成”这个任务时,我原本以为就是把API调通、拿到结果就完事了,真正落地才发现,把大模型接进业务系统远不止“发个HTTP请求”那么简单。这里面有鉴权策略、上下文管理、流式输出、成本控制、异常兜底等一系列问题…

📰

自有协议实现LoRa组网:从帧设计到现场排障

简介:LoRa自定义组网工程资料,面向有一定嵌入式或物联网基础、希望脱离标准LoRaWAN自建协议栈的开发者。压缩包内提供完整的STM32 LoRa节点与网关工程,包含终端参数配置、数据包格式设计、确认重传、加密鉴权及网关到服务器的转发处理等环节&…

📰

覆盖路径规划三大算法:牛耕、螺旋与图覆盖的实现与选型

简介:CPP.zip 是一份面向机器人学与自动化领域研究者的覆盖路径规划(Coverage Path Planning)完整实现包,针对如何让移动实体高效遍历整个工作区域、不重复不遗漏这一核心问题,适用于地面清洁、环境监测、搜索救援等典…

📰

Kafka“Too many open files”故障排查与调优:从文件描述符到ulimit实践

凌晨两点被值班电话叫起来的滋味,只要是运维过 Kafka 的人都懂。那次故障的起因并不复杂——某个业务团队临时调大了消费并发,broker 上的活跃连接数直接翻倍,紧接着日志里就开始刷 java.io.IOException: Too many open files 。新连接拒绝…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬