力扣精选算法100题——水果成篮(滑动窗口专题)

本题链接👉水果成篮


第一步:了解题意

我就按照实例1来进行对这题的理解。

1代表种类类型,这个数组里面有2个种类类型 ps:种类1和种类2 ,只不过种类1是有2个水果,种类2有一个水果,共计3个水果。

本题需要解答:收集水果的最大数目.

但是前提条件:

  • 我们只有2个篮子,每个篮子里只能装1种类型,但是篮子里的数量是不限制的。
  • 每采摘一次,将会可以向右移动到下一棵树,并继续采摘,不能跳过一棵树
  • 2个篮子表示着我们只能容纳2个类型的,出现第3类型的苹果,我们就直接结束采摘

就按实例3来表示:fruits[1,2,3,2,2] 

1,2,遇到3的时候,这就是我们遇到的第三种类型水果了,那么我们就需要停止,这时候就可以记录一次苹果的数量2,其实后面就不用看了。

然后就从2开始,因为2,3是2种类型就可以继续采摘,大于2才是不行的,所以2,3,2,2,一直是可以的,因为都是种类2,相当于同一种类型,所以苹果数量是4,这时候最大的采摘数量是4. 


第二步:算法思路

以后我们遇到一些题目记录一些重复值个数,如果超过几个数或者不能重复,就需要将这个值存入到哈希表中(其实就是值得映射到数组中去)

大部分题目都是从 暴力枚举 然后一步一步的优化得到的,所以

第一种解法:暴力枚举+哈希

首先定义2个指针,都是在0位置出发。

暴力枚举中的第二步,每一次都得清空hash中的值,我们就会觉得很繁琐,那么如何优化呢?


第二种解法:滑动窗口+哈希

滑动窗口的模板:

1.left=0,right=0;

2.进窗口

3.判断

4.出窗口

更新结果(这是是在上面的4个步骤中根据题目的不同来穿插的)

2.进窗口

实际上,就是让right的值存入到hash表中(hash表其实就是一个一维数组)

3.判断

我们上面再了解题意的时候已经写上了(种类超过2种的就得停止采摘)

所以判断的条件就是是否超过2种种类。

4.出窗口

出窗口建立在判断的时候的 ,判断了超过2种类型,我们就得出窗口,left对应的值就得--,如果减到0了我们就得给种类-1,知道减到种类=2,left++,我们就可以继续进行滑动窗口的步骤。

5.更新结果

结果是只要判断结果kinds<2就可以更新结果。

第三步:代码实现

class Solution {
public:int totalFruit(vector<int>& fruits) {int hash[100001]={0};//统计窗口中出现了多少种水果int ret=0;for(int left=0,right=0,kinds=0;right<fruits.size();right++){if(hash[fruits[right]]==0) kinds++;hash[fruits[right]]++;//进窗口while(kinds>2)//判断{//出窗口hash[fruits[left]]--;//left对应的值一直--if(hash[fruits[left]]==0) kinds--;//直到-到0就给种类--left++;}ret=max(ret,right-left+1);}return ret;}
};

我永远走在提升自己的路上~ 

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

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

相关文章

设计模式复盘

一、背景 在项目中&#xff0c;对于单据的扩展是基于类似于接口扩展实现的。从业务横行来看&#xff0c;业务有A、B、C&#xff1b;从纵向来看&#xff0c;单个业务逻辑编排也可以划分为基础数据查询&#xff0c;决策判断&#xff0c;逻辑执行三大块。 单据扩展&#xff1a;平…

如何区分GPT-3.5模型与GPT-4模型?

GPT 3.5 和 GPT-4 有什么区别&#xff1f; GPT-3.5 在经过大量数据训练后&#xff0c;成功地发展到可以考虑 1750 亿个参数以响应提示。这使其具备令人印象深刻的语言技能&#xff0c;以非常人性化的方式回应各种查询。然而&#xff0c;GPT-4 在更为庞大的训练数据基础上进行了…

腐烂的橘子 -- DFS、BFS

994. 腐烂的橘子 class OrangesRotting:"""994. 腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/"""def solution(self, grid: List[List[int]]) -> int:"""BFS时间复杂度 O(M*N)空间复杂度 O(M*N):par…

Vue keep-alive的使用和原理解析

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

linux建立基本网站

网站需求&#xff1a; 1.基于域名[www.openlab.com]可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[www.openlab.com/student] 网站访问学生信息 [www.openlab.com/data]网站访问教学资…

使用@JsonSerialize注解处理单位换算以及数据默认值

一、需求 使用JsonSerialize&#xff0c;来解决单位换算&#xff0c;以及数据为空时返回“**”默认值问题。例如有时候我们需要将金额&#xff0c;以万元的形式返回&#xff0c;需要千分位等等。 注意&#xff1a;如果使用fastjson进行序列化&#xff0c;则本注解不会生效。此…

2024年华为OD机试真题-转盘寿司-Java-OD统一考试(C卷)

题目描述: 寿司店周年庆,正在举办优惠活动回馈新老客户。 寿司转盘上总共有n盘寿司,prices[i]是第i盘寿司的价格,如果客户选择了第i盘寿司,寿司店免费赠送客户距离第i盘寿司最近的下一盘寿司 j,前提是prices[j]< prices[i],如果没有满足条件的 j,则不赠送寿司。 每个…

GPT获取session token

这里写自定义目录标题 概述通过浏览器获取session token通过ChatGPT网页获取session token 概述 ChatGPT是一种基于人工智能的对话模型&#xff0c;由OpenAI开发。通过使用ChatGPT的API&#xff0c;用户可以实现智能对话的功能。这篇文章将介绍如何获取ChatGPT Session Token以…

leetcode 67. 二进制求和

一、题目 二、解答 1.思路 1.1 思路1 转成2个二进制数字相加&#xff0c;之后再转回字符串 1.2 思路2 遍历字符串挨个相加&#xff1a; 补齐2个字符串到同样长度 while循环&#xff0c;如果指针>0不断循环如果a短&#xff0c;给字符串前插入&#xff08;a长度-b长度&a…

Java:多线程问题小结(二)

21、FutureTask是什么 这是一个比较偏实践的问题&#xff0c;这种问题我觉得挺有意义的。可以这么做&#xff1a; &#xff08;1&#xff09;获取项目的pid&#xff0c;jps或者ps -ef | grep java&#xff0c;这个前面有讲过 &#xff08;2&#xff09;top -H -p pid&#xff…

npm link 后怎么查看软连接和删除软连接的

一&#xff1a;在你的npm项目中&#xff0c;进行打包&#xff0c;形成一个dist文件 npm run build // 这是我的打包命令&#xff0c;具体可查看 package.json 文件 二&#xff1a; 打包完成后&#xff0c;运行pwd命令&#xff0c;可查看到你npm项目的路径。 pwd // 输出一…

Java开发笔记

一、参数校验 1、校验json字符串是否符合规范 &#xff08;1&#xff09;业务场景&#xff1a;接收前端传输过来的json串&#xff0c;需要将其写入数据库&#xff0c;写入之前需要校验其是否能够转换成对应实体类&#xff0c;以便后续从数据库读取   &#xff08;2&#xff0…

【Java 设计模式】创建型之工厂方法模式

文章目录 1. 定义2. 应用场景3. 代码实现4. 应用示例结语 在软件开发中&#xff0c;工厂方法模式是一种常见的创建型设计模式&#xff0c;它提供了一种将对象的实例化延迟到子类的方法。工厂方法模式通过定义一个创建对象的接口&#xff0c;但是让子类决定实例化哪个类。在本文…

C++ Primer 6.3 返回类型和return语句 知识点+练习题

C Primer 6.3 返回类型和return语句 无返回值函数有返回值的函数两个错误值是如何被返回的返回类类型的函数和调用运算符引用返回左值列表初始化返回值主函数main的返回值返回数组指针 递归练习题疑问待更新 无返回值函数 用在返回值类型为void的函数中&#xff0c;可以不写re…

若依基于jsencrypt实现前后端登录密码加密

若依虽然有加密解密功能&#xff0c;然后只有前端有&#xff0c;在用户点击保存密码的时候&#xff0c;会将密码保存到本地&#xff0c;但是为了防止密码泄露&#xff0c;所以在保存的时候&#xff0c;进行加密&#xff0c;在回显密码的时候进行解密显示&#xff0c;用户在登录…

29 旋转工具箱

效果演示 实现了一个菜单按钮的动画效果&#xff0c;当鼠标悬停在菜单按钮上时&#xff0c;菜单按钮会旋转315度&#xff0c;菜单按钮旋转的同时&#xff0c;菜单按钮旋转的8个小圆圈也会依次旋转360度&#xff0c;并且每个小圆圈的旋转方向和菜单按钮的旋转方向相反&#xff0…

数据结构期末复习(4)串 树和二叉树

串 在数据结构中&#xff0c;串是由零个或多个字符组成的有限序列。它是一种线性数据结构&#xff0c;常用于表示和处理文本、字符串等信息。 串的特点包括&#xff1a; 顺序性&#xff1a;串中的字符按照一定的先后顺序排列&#xff0c;每个字符都有一个唯一的位置。有限性&…

MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器

系列文章目录 前言 本示例展示了如何利用非线性模型预测控制&#xff08;MPC&#xff09;为四旋翼飞行器设计一个跟踪轨迹的控制器。 一、四旋翼模型 四旋翼飞行器有四个向上的旋翼。从四旋翼飞行器的质量中心出发&#xff0c;旋翼呈等距离的正方形排列。四旋翼飞行器动力学数…

记一次文件上传引发的OSS_ACCESS_KEY泄露

文章目录 一、漏洞原因二、漏洞成果三、漏洞利用0x01 任意用户注册0x02 文件上传处泄露OSS_AK0x03 OSS管理四、总结五、免责声明一、漏洞原因 由于是教育系统,可以进行任意用户注册;由于在身份认证的模块,可以进行文件上传,返回数据包中泄露OSS_ACCESS_KEY;通过图形化管理工…

【LeetCode】1. 两数之和(简单)——代码随想录算法训练营Day06

题目链接&#xff1a;1. 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素…