算法刷题:水果成篮

水果成篮

  • .
  • 题目链接
  • 题目详情
  • 题目解析
  • 算法原理
    • 滑动窗口
    • 定义指针及变量
    • 进窗口
    • 判断
    • 出窗口
    • 更新结果
  • 我的答案

.

在这里插入图片描述

题目链接

水果成篮

题目详情

在这里插入图片描述

题目解析

这道题的意思是,在一个数组中,找到一个最长的连续的子数组,并且其中包含的水果种类不超过两个
在这里插入图片描述
left和right刚开始都指向数组首元素,right向右移动,对数组进行遍历,记录水果种类(left与right之间)
如图:在left与right之间,此时刚好超过两个种类的水果,此时需要将left进行右移
left右移后有两种结果:

  1. 水果种类不变 此时right不动
  2. 水果种类减少 此时right需要继续向右进行遍历数组,直到水果种类再次超过两个
    每次满足水果种类不超过2的时候,需要更新left与right之间的长度,即子数组的最大长度
    上述过程,两个指针都会向右移动,即滑动窗口模型,因此,下面我们使用滑动窗口来解决这道题

算法原理

滑动窗口

在这里插入图片描述

定义指针及变量

首先,滑动窗口需要两个指针,left和right,都需要对数组进行从左往右的遍历,因此,初始值都为0
还需要一个用来记录水果种类的变量,这里可以使用HashMap容器,还可以使用数组来模拟容器,这里我们使用HashMap容器来实现
除此之外,我们还需要定义一个变量,用来记录当前子数组的最大长度

进窗口

这里的进窗口,即将right当前的水果加入到容器中,并将其在容器中的个数加一

判断

判断容器中水果的种类,是否大于2

出窗口

将left所在的水果,在容器中的个数减一
当eft所在的水果个数为0时,让left所在的水果从容器中移除
left往右移动一位

更新结果

当满足容器中水果种类不超过2的时候,对子数组最大长度进行实时更新

我的答案

class Solution {public int totalFruit(int[] f) {//使用容器统计水果种类Map<Integer,Integer> fruits = new HashMap<>();//定义指针int ret = 0;for(int left = 0,right = 0;right<f.length;right++){//进窗口fruits.put(f[right],fruits.getOrDefault(f[right],0)+1);//判断while(fruits.size()>2){//出窗口int out = f[left];fruits.put(out, fruits.get(out)-1);//更新水果种类if(fruits.get(f[left])==0){fruits.remove(f[left]);}left++;}//更新最大子数组长度ret=Math.max(ret,right-left+1);}return ret;}
}

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

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

相关文章

【Vuforia+Unity】AR05-实物3D模型识别功能实现(ModelTarget )

不管是什么类型的识别Vuforia的步骤基本都是&#xff1a; 把被识别的物体转成图、立体图、柱形图&#xff0c;3D模型、环境模型&#xff0c;然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容&#xff0c;然后参考模型自动隐藏-发布APP-识别生活中实物-数字内…

SQL面试题及答案

介绍 在快节奏的数据管理和信息技术世界中,导航和操作结构化数据的能力是一项非常重要的技能。SQL,即结构化查询语言,是关系数据库的基石,掌握这种语言的专业人员的需求量很大。SQL 面试在科技行业很常见,潜在的候选人会接受测试以展示他们的知识和解决问题的能力。为了帮…

嵌入式Linux中apt、apt-get命令用法汇总

在Linux环境开发过程中接触ubuntu虚拟机时&#xff0c;在安装软件或者更新软件时apt和apt-get命令使用相对较频繁&#xff0c;下面对这两个命令的用法进行汇总。 apt&#xff08;Advanced Package Tool&#xff09;和 apt-get 是用于在基于 Debian 的 Linux 发行版中进行软件包…

Echarts与后台(mongoose)交互

Echarts引入地址可参考 echarts组件引入 <template><div><div id"main" style"width: 600px;height:400px;"></div></div> </template><script setup> import { onMounted, ref } from vue; import * as echa…

协程源码 launch 流程跟踪学习

为了更深入学习协程的底层实现原理&#xff0c;了解协程线程切换的根本本质。也为了以后在工作中可以根据不同的需求场景&#xff0c;更加随心所欲的使用不同的协程。 今天通过 launch 跟踪一下协程的执行流程。 fun getData() {Trace.beginSection("getData");Log.…

[OpenAI]继ChatGPT后发布的Sora模型原理与体验通道

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…

C语言——指针——第2篇——(第20篇)

坚持就是胜利 文章目录 一、指针和数组二、二级指针1、什么是 二级指针&#xff1f;2、二级指针 解引用 三、指针数组模拟二维数组 一、指针和数组 问&#xff08;1&#xff09;&#xff1a;指针和数组之间是什么关系呢&#xff1f; 答&#xff1a;指针变量就是指针变量&…

多窗口编程

六、多窗口编程 QMessageBox消息对话框&#xff08;掌握&#xff09; QMessageBox继承自QDialog&#xff0c;显示一个模态对话框。用于用户前台信息通知或询问用户问题&#xff0c;并接收问题答案。 QDialog的Qt源码中&#xff0c;派生类往往都是一些在特定场合下使用的预设好的…

物麒平台长按持续音量+-实现方法

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送蓝牙音频&#xff0c;DSP音频项目核心开发资料, 1 问题 目前设置为长按音量-&#xff0c;但是默认的是单步加减方式(长按一次变化一格&a…

Leetcoder Day18| 二叉树 part07

语言&#xff1a;Java/Go 今天做了一个小决定&#xff0c;如果时间不够的话&#xff0c;可以先看go去找实习&#xff0c;所以现在加上用go去刷题 530.二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。…

C#_扩展方法

简述&#xff1a; 扩展方法所属类必需是静态类&#xff08;类名依据规范通常为XXXExtension&#xff0c;XXX为被扩展类&#xff09;扩展方法必需是公有的静态方法扩展方法的首个参数由this修饰&#xff0c;参数类型为被扩展类型 示例&#xff1a; static class DoubleExtens…

敏捷项目管理在现代软件开发中的应用

在现代软件开发领域&#xff0c;项目管理起着至关重要的作用。随着技术的不断进步和市场需求的快速变化&#xff0c;传统的项目管理方法已逐渐无法满足软件开发的需求。因此&#xff0c;敏捷项目管理应运而生&#xff0c;成为许多软件开发团队的首选方法。本文将探讨敏捷项目管…

DataDreamer:让创建自定义数据集轻松无比!还自带标注!

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是Ash…

C语言----字符数组指针

1.char arr[] {a,b,c,d,e,f}; sizeof分析类型就可以计算所占的内存空间的大小&#xff1b; &#xff08;1&#xff09;printf("%d\n", sizeof(arr)); 数组名单独放进里面&#xff0c;计算整个数组大小&#xff0c;所以是6字节&#xff1b; &#xff08;2&#xff…

设置主从复制时发生报错Could not find first log file name in binary log index file‘;解决方案

如图所示&#xff0c;slave_io_runnind:no,slave_sql_running:yes 此时&#xff0c;主从配置错误&#xff0c;我们可以查看Last_IO_Error:来查看报错信息 此时&#xff0c;我们需要停止从服务器的主从服务&#xff0c; mysql> stop slave; Query OK, 0 rows affected, 1 w…

k8s-heml管理 17

Helm是Kubernetes 应用的包管理工具&#xff0c;主要用来管理 Charts&#xff0c;类似Linux系统的 yum。Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata&#xff0c;以便于应用程序的分发。 对于应用…

压缩感知(Compressed Sensing,CS)的基础知识

压缩感知&#xff08;Compressed Sensing&#xff0c;CS&#xff09;是一种用于信号处理的技术&#xff0c;旨在以少于奈奎斯特采样定理所要求的样本频率来重构信号。该技术利用信号的稀疏性&#xff0c;即信号可以用较少的非零系数表示。压缩感知在图像获取中的应用使得在采集…

LabVIEW多场景微振动测试平台与教学应用

LabVIEW多场景微振动测试平台与教学应用 在多种工程实践中&#xff0c;微振动的测试与分析对于评估结构的稳定性及其对环境的影响至关重要。针对这一需求&#xff0c;开发了一套基于NI-cDAQ和LabVIEW的多场景微振动测试平台&#xff0c;提高微振动测试的精确度与灵活性&#x…

Python和Jupyter简介

在本notebook中&#xff0c;你将&#xff1a; 1、学习如何使用一个Jupyter notebook 2、快速学习Python语法和科学库 3、学习一些IPython特性&#xff0c;我们将在之后教程中使用。 这是什么&#xff1f; 这是只为你运行在一个个人"容器"中的一个Jupyter noteboo…

vivado FSM Components

Vivado合成功能 •同步有限状态机&#xff08;FSM&#xff09;组件的特定推理能力。 •内置FSM编码策略&#xff0c;以适应您的优化目标。 •FSM提取默认启用。 •使用-fsm_extraction off可禁用fsm提取。 FSM描述 Vivado综合支持Moore和Mealy中的有限状态机&#xff08;…