算法刷题:水果成篮

水果成篮

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

.

在这里插入图片描述

题目链接

水果成篮

题目详情

在这里插入图片描述

题目解析

这道题的意思是,在一个数组中,找到一个最长的连续的子数组,并且其中包含的水果种类不超过两个
在这里插入图片描述
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://xiahunao.cn/news/2803840.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

有哪些适合程序员的副业?

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…

靡语IT:Vue精讲(一)

Vue简介 发端于2013年的个人项目&#xff0c;已然成为全世界三大前端框架之一&#xff0c;在中国大陆更是前端首选。 它的设计思想、编码技巧也被众多的框架借鉴、模仿。 纪略 2013年&#xff0c;在Google工作的尤雨溪&#xff0c;受到Angular的启发&#xff0c;从中提取自…

CPU漏洞之Meltdown

1.前言 计算机系统的安全性从根本上依赖于内存隔离&#xff0c;例如内核(Kernel)地址范围被标记为不可访问&#xff0c;并对用户访问加以限制和保护&#xff0c;因此操作系统确保了用户程序不能访问彼此的内存或内核内存。这种内存隔离是我们计算机环境的基石&#xff0c;它允…

驾校预约|驾校预约小程序|基于微信小程序的驾校预约平台设计与实现(源码+数据库+文档)

驾校预约小程序目录 目录 基于微信小程序的驾校预约平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户​微信端功能模块​ 2、管理员服务端功能模块 &#xff08;1&#xff09;学员信息管理 &#xff08;2&#xff09; 教练信息管理 &#xff08;3&…

鸿蒙学习-dataPreferences数据存储后,重新运行获取为空的问题

解决方案 通过IDE运行时&#xff0c;保存数据&#xff0c;只进行覆盖安装即可&#xff0c;在IDE中设置如下&#xff1a; 勾选 Keep Application Data 即可

Java零基础 - 位移运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【2024软件测试面试必会技能】Appium自动化(6):原生app元素定位方法

元素定位方法介绍及应用&#xff1a; Appium方法定位原生app元素: 通过appium inspector工具&#xff0c;可以获取元素的相关信息&#xff1b;在appium中提供了一系列的元素定位API&#xff0c;通过在这些API中输入指定的元素信息&#xff0c;就能完成元素定位&#xff0c;定…

《Python 语音转换简易速速上手小册》第9章 特定领域的语音处理(2024 最新版)

文章目录 9.1 语音处理在不同行业的应用9.1.1 基础知识9.1.2 主要案例:智能客服机器人案例介绍案例 Demo案例分析9.1.3 扩展案例 1:医疗语音助手案例介绍案例 Demo案例分析9.1.4 扩展案例 2:语言学习应用案例介绍案例 Demo

不做内容引流,你凭什么在互联网上赚钱?

孩子们放寒假了&#xff0c;待在家里不是看电视&#xff0c;就是拿着手机刷视频&#xff0c;脸上是各种欢快和满足。只是一切换到写作业模式&#xff0c;孩子是各种痛苦表情包&#xff0c;家长则是使出浑身解数&#xff0c;上演亲子大战。可见娱乐常常让人愉悦&#xff0c;而学…

wondows10用Electron打包threejs的项目记录

背景 电脑是用的mac&#xff0c;安装了parallels desktop ,想用electron 想同时打包出 苹果版本和windows版本。因为是在虚拟机里安装&#xff0c;它常被我重装&#xff0c;所以记录一下打包的整个过程。另外就是node生态太活跃&#xff0c;几个依赖没记录具体版本&#xff0…

阿里巴巴店铺宝藏全揭秘:一键获取所有商品信息,电商业务效率飙升

阿里巴巴店铺所有商品API接口技术全解析 一、引言 在阿里巴巴这个全球领先的电商平台上&#xff0c;店铺所有商品API接口&#xff08;item_search_shop&#xff09;为开发者提供了一个便捷的途径&#xff0c;能够获取店铺的所有商品信息。通过这一接口&#xff0c;无论是数据…

基于springboot+vue实现的大学竞赛报名管理系统

一、系统架构 前端&#xff1a;vue2 | echarts 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 教师端-统计分析 03. 教师端-竞赛通知管理 04. 教师端-获奖通告管理 05. 教师端…

ElementUI组件的安装和使用

Element UI 是一款基于 Vue 2.0 的桌面端组件库&#xff0c;主要用于快速构建网站的前端部分。它提供了丰富的组件&#xff0c;如按钮、输入框、表格、标签页等&#xff0c;以及一些布局元素&#xff0c;如布局容器、分割线等。Element UI 的设计风格简洁&#xff0c;易于上手&…

QSettings使用示例

解决的问题&#xff1a; 平常要存储一些临时数据&#xff0c;或者ini的系统参数数据&#xff0c;以下是源码解析 如何实现&#xff1a; 实现的UI如下 主要功能&#xff1a; 初始化&#xff1a; m_settings new QSettings("DParamSetting.ini", QSettings::IniFo…

elementPlus的table设置序号

//正常显示 不做任何操作的序列号 <el-table-column label"序号" type"index" width"50"></el-table-column>如果表格每页显示10条数据&#xff0c;这样表格的每一页的序号都是1到10。 现在有个需求是第一页显示1-10&#xff0c;第…

基于java+springboot+vue实现的城市垃圾分类管理系统(文末源码+Lw)23-191

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本城市垃圾分类管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数…

人工智能 — 图像滤波器

目录 一、图像噪声1、高斯噪声2、椒盐噪声3、泊松噪声4、乘性噪声5、瑞利噪声6、伽马噪声 二、图像滤波三、各种滤波器1、均值滤波2、中值滤波3、最大最小值滤波4、引导滤波 四、图像增强1、点处理1、线性变换2、分段线性变换3、对数变换4、幂律变换/伽马变换 2、领域处理3、图…

浏览器录屏技术:探索网页内容的视觉记录之道

title: 浏览器录屏技术&#xff1a;探索网页内容的视觉记录之道 date: 2024/2/23 14:32:49 updated: 2024/2/23 14:32:49 tags: 浏览器录屏技术原理Web API应用场景用户体验在线教育产品演示 在当今数字化时代&#xff0c;浏览器录屏技术已经成为了一种强大的工具&#xff0c;…

消息队列MQ 保证消息不丢失(消息可靠性)

文章目录 概述RabbitMQ 怎么避免消息丢失&#xff08;可靠传输&#xff09;RocketMQ 怎么确保消息不丢失Kafka 怎么保证消息不丢失activeMQ 怎么避免消息丢失MQ 宕机了消息是否会丢失线上服务宕机时&#xff0c;如何保证数据100%不丢失吗&#xff1f;消息队列消息持久化 概述 …

石头剪刀布游戏(C语言)

题目描述 石头剪刀布游戏有 3 种出拳形状&#xff1a;石头、剪刀、布。分别用字母 A , B , C 表示。 游戏规则: 出拳形状之间的胜负规则如下&#xff1a; A > B&#xff1b;B > C&#xff1b;C > A&#xff1b;">"左边一个字母&#xff0c;表示相对优…