【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词

【LeetCode刷题】Day 9

  • 题目1:904. 水果成篮
    • 思路分析:
    • 思路1:暴力枚举+哈希表
    • 思路2:窗口滑动+哈希表
  • 题目2:438. 找到字符串中所有字母异位词
    • 思路分析:
    • 思路1:暴力枚举+哈希表
    • 思路2:滑动窗口+哈希表
  • 收获满满✨:

在这里插入图片描述

题目1:904. 水果成篮

在这里插入图片描述

思路分析:

对于滑动窗口来说,我们会慢慢感觉滑动窗口并不难,就拿这道题来说,难的不是算法,而是怎么记录 果篮中已经装了多少种每种种类已经选择了多少棵树以及 果篮所选种类是什么。这三个点如果用 unordered_map<int,int>来处理也是很简单,但频繁的删除,效率很低。
果篮中已经装了多少种: 主要是判断种类是否超过两种,出窗口判断时需要;
每种种类已经选择了多少棵树: 出窗口时,需要判断是否已经将该种树出完,种类数量才知道是否减少。
果篮所选种类是什么: 我们要支持果篮中种类的树进入窗口,就需要比对是否是果篮中记录的两种种类的树。

如何替换?根据题目给出的提示我们知道这个fruits[i]<=105 ,所以只用数组hash[100001]就可以记录所选种类以及已经选择种类的棵数。再用int kinds来记录种类数量就可以了

思路1:暴力枚举+哈希表

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

本题的滑动窗口分析:
进窗口:记录 right位置的种类数量,数据维护:果篮中的种类数量 kinds
判断:当种类数量 kinds超过两种,就需要执行出窗口操作。出窗口:去除一个种类的树,让该类树在果篮的棵数变为0,种类数量 kinds减小。
更新结果:每进一次符合要求就更新一次。

代码实现:

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

LeetCode链接:904. 水果成篮


题目2:438. 找到字符串中所有字母异位词

在这里插入图片描述

思路分析:

我们先讨论如何判断两个字符串是异位词:无关顺序,但字母相同且各字母的数量也相同。所以我们只需要判断每个字母的数量就可以。

提示这里也说只有小写字母,总数有限,可以用哈希表;

初步思想: 两张哈希表分别统计s子串中各字母数量和p中各字母数量。如果两个表完全相同就是异位词。

思路1:暴力枚举+哈希表

列出所有长度为p.size()的子串,在比对两张哈希表,相同则push_back子串左端点下标进vector<int>容器。

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

对比哈希表来判断是否更新结果,这个过程需要同时遍历对比,太过于复杂,可以优化下。

用count来记录窗口中的有效字母的数量,当有效字母等于p.size()就可以更新数据。

本题的滑动窗口分析:
进窗口: hash2[in-'a']++; 维护数据: count
判断:长度是固定的为 p.size(),超过就要出窗口。出窗口也要维护数据: count
更新结果:当 count==p.size()就表明是异或词,更新结果。

代码实现:

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> v;int hash1[26]={0};      //记录p中每个字符的个数for(int i=0;i<m;i++) hash1[p[i]-97]++;int hash2[26]={0};      //统计窗口中每一个字符出现的个数int count=0;            //记录有效字符的个数int left=0,right=0,n=s.size(),m=p.size();                while(right<n){char in=s[right];hash2[in-'a']++;	//进窗口if(hash2[in-'a']<=hash1[in-'a']) count++; //维护数据while(right-left+1>m) //判断{char out=s[left];if(hash2[out-'a']<=hash1[out-'a']) count--; //维护数据hash2[out-'a']--;	//出窗口left++;}if(count==m) v.push_back(left); //更新结果right++;}return v;}
};

LeetCode链接:438. 找到字符串中所有字母异位词


收获满满✨:

  • 滑动窗口思想,什么时候用和怎么用都在操作中熟悉了,目前最主要的是对题目的理解以及一些操作处理。比如上述题中:hash哈希表的运用就需要积累。
  • 有效数据个数count 代替 两张哈希表的对比

✨✨请对自己温柔,也适当享受自己的偏爱和例外;
慢慢的,你会发现总有人也会如你一般,对你偏爱和例外!

~天天开心🎈
在这里插入图片描述

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

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

相关文章

极简编程:一行JS代码获取全球各城市当前时间!

之前在一些国际化网站看到过&#xff0c;他们展示了当前北京、纽约和伦敦的时钟&#xff0c;在一次住店的时候&#xff0c;我也看到了类似的3个时钟&#xff0c;甚至更多&#xff0c;有的会展示东京时间。 让我觉得获取一些全球重点城市的当前时间&#xff0c;会是一个很常用的…

【NumPy】关于numpy.add()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

5.4 Go 匿名函数与闭包

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

网站笔记:huggingface——can you run it?

Can You Run It? LLM version - a Hugging Face Space by Vokturz 1 配置设置部分 Model Name就是需要测量的模型名称 GPU Vendor ——GPU供应商 Filter by RAM (按RAM过滤) 筛选出所有内存容量在选择范围之间的GPU GPU 下拉菜单选择具体的GPU型号 LoRa % trainable param…

靠AI创意,变现20w!

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 之前X小鹿一直在各…

记录一次安装k8s初始化失败

实例化 kubeadm init --configkubeadm.yaml --ignore-preflight-errorsSystemVerification报错 [init] Using Kubernetes version: v1.25.0 [preflight] Running pre-flight checks error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR CRI]: co…

海外仓erp系统是什么?和海外仓管理系统一样吗?

为了满足海外仓全球化发展的大趋势&#xff0c;同时提升海外仓运转的效率&#xff0c;一套好用&#xff0c;性价比高的海外仓管理系统还是非常重要的。 不过很多海外仓企业其实不太分得清erp系统和海外仓管理系统的差异&#xff0c;今天我们就来系统的聊一下&#xff0c;方便大…

K8S有了Service,为什么还要Ingress?

1、有了Service为什么还要Ingress? NodePort对外暴露端口存在的不足&#xff1a; 一个端口只能一个服务使用, 端口需要提前规划。 随着业务扩展, 端口的管理将是一个头疼的问题 只支持4层的负载均衡 LoadBalancer存在的不足&#xff1a; 贵、贵、贵。 要上云(俗话说上云…

需求跟踪矩阵是什么?怎么创建?一文详解

一、什么是需求跟踪矩阵 对项目经理或产品经理来说&#xff0c;需求清单肯定不陌生&#xff0c;那什么是需求跟踪矩阵呢&#xff1f; 需求跟踪矩阵&#xff08;Requirement Track Matrix&#xff0c;简称RTM &#xff09;&#xff0c;是把产品需求从其来源连接到能满足需求的…

无人机助力光伏项目测绘建模

随着全球对可再生能源需求的不断增长&#xff0c;光伏项目作为其中的重要一环&#xff0c;其建设规模和速度都在不断提高。在这一背景下&#xff0c;如何高效、准确地完成光伏项目的测绘与建模工作&#xff0c;成为了行业发展的重要课题。近年来&#xff0c;无人机技术的快速发…

哪个品种能够叫板白银现货t+d?

白银TD是在上海黄金交易所挂牌的白银投资品种&#xff0c;它可以说是国内版的现货白银交易&#xff0c;大家也可以把它理解成为白银交易的“快速通道”。通过它&#xff0c;投资者可以更加灵活地买卖白银&#xff0c;实现对内地白银价格的跟踪&#xff0c;并获得一定的杠杆化收…

git工作流程

以财务开发为例子&#xff1a; 1. 新建分支 1.1. upstream新建分支&#xff1a;finance-feature 1.2. origin新建对应分支&#xff1a;finance-feature 1.3 新建本地分支 git branch finance-feature 注&#xff1a; 同步远程分支&#xff1a;git fetch upstream feature…

CSDN智能总结助手

github项目地址&#xff1a; https://github.com/anjude/little-demo/tree/master 获取CSDN的user name和user token 打开csdn&#xff0c;打开控制台 - Application - Cookies&#xff0c;找到domain为blog.csdn.net的cookie&#xff0c;复制user_name和user_token的值 把上…

最详细Linux提权总结(建议收藏)

1、内核漏洞脏牛提权 查看内核版本信息 uname -a 具体提权 1、信息收集配合kali提权 uname -a #查看内核版本信息 内核版本为3.2.78&#xff0c;那我们可以搜索该版本漏洞 searchsploit linux 3.2.78 找到几个可以使用的脏牛提权脚本&#xff0c;这里我使用的是40839.c脚…

独立乙游井喷成新趋势,真来抢市场还是只画大饼?

国产乙游市场又迎来了新变化。 进入5月份&#xff0c;独立乙女游戏如雨后春笋般冒了出来&#xff0c;两、三个人组成的制作组&#xff0c;没有任何程序协助和资金支持&#xff0c;全靠为爱发电来打造一款乙女游戏&#xff0c;成为了今夏乙游市场的新趋势。 目前已经有独立乙游…

SwiftUI 5.0(iOS 17)进一步定制 TipKit 外观让撸码如虎添翼

概览 在之前 SwiftUI 5.0&#xff08;iOS 17&#xff09;TipKit 让用户更懂你的 App 这篇博文里&#xff0c;我们已经初步介绍过了 TipKit 的基本知识。 现在&#xff0c;让我们来看看如何进一步利用 SwiftUI 对 TipKit 提供的细粒度外观定制技巧&#xff0c;让 Tip 更加“明眸…

蓝桥杯第十四届国赛B组刷题笔记

A-0子2023&#xff1a; 题目&#xff1a; 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; &#x1d446;12345678910111213...20222023S12345678910111213...20222023。 小蓝想知道 &#x1d446;S 中有多少种子序列恰好等…

用Python爬取百度搜索结果并保存

项目目标 爬取百度上关键字为“粮食”的搜索结果&#xff0c;并保存&#xff0c;提交给客户&#xff0c;用于进一步分析我国粮食政策。 项目准备 软件&#xff1a;PyCharm 需要的库&#xff1a;json&#xff0c; requests&#xff0c;etree 项目分析 1&#xff09;如何进行…

人工智能应用层岗位—AI项目经理/AI产品经理

AI是一门技术&#xff0c;最终落实成产品才能具备商业价值 应用层&#xff0c;就是面向特定应用场景&#xff0c;形成人工智能软硬件产品或解决方案。主要包括行业AI解决方案和热门产品&#xff0c;如自动驾驶、机器人、智能家居、可穿戴的智能设备等 相应的&#xff0c;就会…

【算法】排序

排序算法在信息学非常常用。Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲几个排序算法。 1.“打擂台”排序 思路&#xff1a;a[ i ]和a[ j ]打擂台&#xff08;i<j&#xff09;。 这个方法简单易懂&#xff0c;只需要看看需不需要交换。按从大到小…