滑动窗口练习5-水果成篮(字节跳动)

题目链接:**. - 力扣(LeetCode)**

题目描述:

你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类

你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:

  • * 你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。

  • * 你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。

  • * 一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。

给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。

示例 1:

输入:fruits = [1,2,1]
输出:3
解释:可以采摘全部 3 棵树。

示例 2:

输入:fruits = [0,1,2,2]
输出:3
解释:可以采摘 [1,2,2] 这三棵树。
如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。

示例 3:

输入:fruits = [1,2,3,2,2]
输出:4
解释:可以采摘 [2,3,2,2] 这四棵树。
如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。

示例 4:

输入:fruits = [3,3,3,1,2,1,1,2,3,3,4]
输出:5
解释:可以采摘 [1,2,1,1,2] 这五棵树。

提示:

  • 1 <= fruits.length <= 105

  • 0 <= fruits[i] < fruits.length

解法(滑动窗口)

算法思路:

研究的对象是一段连续的区间,可以使用「滑动窗口」思想来解决问题
让滑动窗口满足:窗口内水果的种类只有两种。
做法:右端水果进入窗口的时候,用哈希表统计这个水果的频次。这个水果进来后,判断哈希表的大小:
​    如果大小超过 2:说明窗口内水果种类超过了两种。那么就从左侧开始依次将水果划出窗口,直到哈希表的大小小于等于2,然后更新结果;
​    如果没有超过 2:说明当前窗口内水果的种类不超过两种,直接更新结果ret

算法流程:

a.初始化哈希表 hash 来统计窗口内水果的种类和数量;
b.初始化变量:左右指针 left=0,right=0,记录结果的变量 ret=0;
c.当 right 小于数组大小的时候,一直执行下列循环:1️⃣ 将当前水果放入哈希表中;2️⃣ 判断当前水果进来后,哈希表的大小:* 如果超过 2:·将左侧元素滑出窗口,并且在哈希表中将该元素的频次减一;·如果这个元素的频次减一之后变成了 0,就把该元素从哈希表中删除;·重复上述两个过程,直到哈希表中的大小不超过 2;3️⃣ 更新结果 ret;4️⃣ right++,让下一个元素进入窗口;
d.循环结束后,ret存的就是最终结果。

C++算法代码(使用容器):

class Solution {
public:int totalFruit(vector<int>& fruits) {unordered_map<int,int> hash;//统计窗口内出现了多少种水果int ret = 0;for(int left = 0, right = 0; right < fruits.size(); right++){hash[fruits[right]]++;//进窗口while(hash.size() > 2)//判断{//出窗口hash[fruits[left]]--;if(hash[fruits[left]] == 0)hash.erase(fruits[left]);left++;}ret = max(ret ,right - left + 1);}return ret;}
};

C++算法代码(用数组模拟哈希表):

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]]--;if(hash[fruits[left]] == 0)kinds--;left++;}ret = max(ret ,right - left + 1);}return ret;}
};

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

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

相关文章

java设计模式(八)装饰模式(Decorator Pattern)

1、模式介绍&#xff1a; 装饰模式是一种结构型设计模式&#xff0c;允许你通过将对象放入包含行为的特殊包装对象中来动态地扩展其功能。它提供了一种灵活的方式来添加功能&#xff0c;避免了创建大量子类的问题。 2、应用场景&#xff1a; 动态添加功能&#xff1a;当需要…

spring-ai 下载不了依赖spring-ai-openai-spring-boot-starter

第1坑&#xff1a;配置第三方仓库不生效&#xff0c; 提示在阿里云仓库没有找到 spring-ai-openai-spring-boot-starter 第2坑&#xff1a;升级jdk17后&#xff0c;springboot项目启动报错 Internal error (java.lang.reflect.InaccessibleObjectException): Unable to make pr…

基于CesiumJs的可视化大屏,效果不是一般的震撼。

CesiumJS是一个用于创建三维地理信息系统&#xff08;GIS&#xff09;应用程序的开源JavaScript库。它提供了强大的地理空间数据可视化和交互功能&#xff0c;可以用于构建虚拟地球、地图、飞行模拟等应用。 1. 三维地理空间可视化&#xff1a; CesiumJS支持将地理空间数据以三…

文档更新 |迅为 RK3568开发板驱动指南-第十五/十六篇

《iTOP-RK3568开发板驱动开发指南》更新&#xff0c;本次更新内容对应的是驱动&#xff08;第十五篇 i2C&#xff09;&#xff08;第十六篇 SPI&#xff09;视频&#xff0c;后续资料会不断更新&#xff0c;不断完善&#xff0c;帮助用户快速入门&#xff0c;大大提升研发速度。…

瑞芯微rk356x TF卡烧写选择指定的屏幕打印烧写的过程

rk356x中TF卡烧写屏幕选择 1、开发环境2、问题描述3、解决办法4、总结5、 图片展示1、开发环境 系统:linux系统 芯片:356x 显示:多屏显示(HDMI, MIPI, LVDS, EDP) 2、问题描述 由于在多屏显示的情况下,HDMI屏在LVDS、MIPI或者EDP协同下,默认情况下,在TF卡烧录过程中…

使用dd命令简单测试磁盘I/O

本文所有测试使用的均是Oracle公有云OCI上的计算实例的启动盘。 第1轮测试使用的是默认的启动盘参数。第2轮测试使用的是自动调整的启动盘参数&#xff08;如下图&#xff09;&#xff0c;性能更高。 第1轮测试 顺序I/O 运行以下命令5次&#xff0c;dsync表示不使用cache&…

计算机网络-组播数据转发原理

一、组播数据转发原理 前面已经学习了组播的基本概念和网络组成结构了&#xff0c;今天来学习下组播数据的转发。首先我们要先明确组播网络也是和单播一样需要网络可达的&#xff0c;因此也是需要单播网络支持的基础上配置组播转发数据。单播网络不通组播网络就没有意义了。 组…

请从android技术层面,描述一下android手机共享屏幕同时如何禁止某些应用保护隐私?

从Android技术层面来看&#xff0c;Android手机在共享屏幕时禁止某些应用以保护隐私的功能&#xff0c;主要依赖于系统权限管理、隐私设置以及可能的系统更新带来的新特性。以下是一些具体的描述和建议&#xff1a; 1. 系统权限管理 Android系统允许用户为每个应用程序设置权…

链表——随机链表的复制

基于这篇文章算法的改进随机链表复制 这道题的关键在于完成链表复制后&#xff0c;如何修改random指针。即如何通过遍历原链表找到复制链表的结点。 过去的算法是修改原链表的next&#xff0c;让每个复制结点位于原链表结点后面。 但是&#xff0c;在C的STL库中&#xff0c;有应…

下载安装JavaFX及解决报错:缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序|Eclipse

目录 1.下载并解压 2.Eclipse配置 3.报错问题 解决方法1&#xff1a;将javaSE更改到9以下 解决方法2&#xff1a; 使用module-info.java配置解决 1.下载并解压 JavaFX下载地址&#xff1a;JavaFX - Gluon 选择合适自己电脑配置的sdk版本下载 打不开网页的参考这个博客&…

智能视频监控如何助力体育场馆安全管理:安防监控EasyCVR视频综合管理方案

近期有新闻报道&#xff0c;6月30日&#xff0c;17岁的中国国家羽毛球运动员在亚洲青年羽毛球锦标赛中&#xff0c;突然晕倒并抽搐&#xff0c;尽管被送往医院抢救&#xff0c;该运动员仍在当晚不幸离世。运动猝死不仅发生于职业运动员身上&#xff0c;在普通健身者中也时有发生…

5.opencv深浅拷贝

图像处理的复制操作 深浅拷贝 图像复制分成两种&#xff0c;第一种假复制&#xff0c;从原图片选择一部分图片拿出来观察&#xff0c;此时新生成的图片和原图实际上是同一张图片&#xff0c;即浅拷贝 将图片的一部分复制下来&#xff0c;放到新的内存中&#xff0c;即两张完全…

Tell Me Why:利用大型语言模型进行可解释的公共健康事实核查

Tell Me Why: Explainable Public Health Fact-Checking with Large Language Models 论文地址:https://arxiv.org/abs/2405.09454https://arxiv.org/abs/2405.09454 1.概述 最近的COVID-19大流行突显了公共健康领域事实核查的关键需求。在信息通过社交媒体平台迅速传播的时…

SpringMVC系列十二: 异常处理

异常处理 异常处理基本介绍局部异常应用实例Debug处理流程 全局异常应用实例Debug处理流程异常处理时: 局部异常 优先级高于 全局异常 自定义异常应用实例Debug处理流程 SimpleMappingExceptionresovler基本说明应用实例对未知异常进行统一处理异常处理的优先级梳理 上一讲, 我…

ECMAScript 6 新特性下篇

ECMAScript 6 新特性续 对象字面量增强 ES6中的对象字面量增强是一种简化对象创建的语法,它可以让我们更方便地定义对象的属性和方法。下面是对ES6对象字面量增强的详细解析与代码示例。 1、简洁属性名 在ES6之前,我们在定义对象属性时,需要将属性名和属性值都写出来。…

Java根据http路径判断路径是否可以访问、获取文件大小

/*** 路径是否可以访问* param urlString* return*/public static boolean isUrlAccessible(String urlString) {try {URL url new URL(urlString);HttpURLConnection connection (HttpURLConnection) url.openConnection();connection.setRequestMethod("HEAD"); …

用ChatGPT辅助论文写作又怕学术造假?这样用就对了!

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 随着人工智能技术的发展&#xff0c;ChatGPT等语言模型在学术研究中的应用日益广泛。然而&#xff0c;在利用这些工具时&#xff0c;如何避免学术造假成为一个重要问题。学术造假不仅损…

flask、fastapi在服务器制作接口携参访问返回参数

flask创建接口&#xff1a; 一、安装python 官网下载Download Python | Python.org 二、安装flask 在选择的文件夹路径cmd调用bash安装 pip install Flask三、创建flask应用 # app.py from flask import Flask, request, jsonify app Flask(__name__) app.route(/ech…

银行卡快捷支付的应用范围

银行卡快捷支付的应用范围非常广泛&#xff0c;几乎涵盖了现代生活中的各种支付场景。以下是银行卡快捷支付的主要应用范围&#xff1a; 1. 线上购物 在电子商务平台、在线商城或移动应用上&#xff0c;用户可以使用银行卡快捷支付进行在线购物支付。通过选择预先绑定的银行卡…

SQLite Glob 子句

SQLite Glob 子句 SQLite 的 GLOB 子句是一种强大的搜索工具,用于在数据库中执行模式匹配操作。它类似于 SQL 中的 LIKE 子句,但 GLOB 使用的是基于文件系统的通配符,而不是 SQL 的百分比 (%) 和下划线 (_) 通配符。在本文中,我们将详细介绍 SQLite 中的 GLOB 子句,包括其…