滑动窗口实例5(水果成篮)

news2024/11/17 17:42:26

题目:

你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 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

算法原理:

涉及连续区间问题,可以考虑用滑动窗口思想,滑动窗口其实就是同向双指针

1 hash数组统计窗口内每种水果出现的次数  kind统计窗口内水果的种类

   left=0(左边界) right=0(指向待进入窗口的元素)

2 进窗口:若是right指向的元素在窗口中第一次出现,则kind++,种类+1

                  hash数组中right指向的元素的个数+1

3 判断:若是right指向的元素进入窗口后,水果种类kind>2,则要出窗口,即更新左边界

4 出窗口:循环出left指向的元素,直至水果种类不再超过2,即要把窗口中的一种水果全部剔除

                 

                  

代码实现:

 

class Solution
{
public:
    int totalFruit(vector<int>& fruits) 
    {
        int kind = 0;
        int n =  fruits.size();
        int left = 0;
        int right = 0;
        int hash[100001] = {0};
        int ret = 0;
        while(right<n)
        {
            if(hash[fruits[right]]==0)//统计水果的种类
            {
                kind++;
            }
            hash[fruits[right]]++;//进窗口
            while(kind>2)//判断
            {
                hash[fruits[left]]--;//出窗口
                if(hash[fruits[left]]==0)
                {
                    kind--;
                }
                left++;
            }
            ret = max(ret,right-left+1);
            right++;
        }
        return ret;
    }
};

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

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

相关文章

qt相关的demo集合

自己写过的qt/c相关程序的demo集合 &#xff08;许多学习自网络中&#xff0c;很感谢大家的分享&#xff09; 源码地址&#xff1a;Qt与学习通页面: 记录与Qt相关的代码 - Gitee.com 源码目录: echart简单应用 opencv图像处理 QSetting简单使用 QtAv播放视频 ui页面 表情 超星…

Vue框架--Vue中的数据代理

下面,我们一起来说以下Vue中的数据代理。 1.Object.defineProperty()方法回顾 * Object.defineProperty()方法基本配置项 * value:指定设置对象内容的属性值 * enumerable:true, //控制属性是否可以枚举(也就是是否可以被遍历),默认值是false * writable:true, //控制属性是…

苹果将在iPhone16系列中引入微透镜阵列技术,亮度更高、功耗更低

根据韩国媒体The Elec的报道&#xff0c;苹果公司正与其主要供应商三星和LG展开合作&#xff0c;以评估并衡量是否有必要在明年的iPhone 16系列中引入微透镜&#xff08;micro-lens&#xff09;技术来升级屏幕。 这项方案集中在OLED屏幕架构上&#xff0c;计划采用微透镜阵列&…

20用于深度学习训练和研究的数据集

数据集在计算机科学和数据科学中发挥着至关重要的作用。它们用于训练和评估机器学习模型&#xff0c;研究和开发新算法&#xff0c;改进数据质量&#xff0c;解决实际问题&#xff0c;推动科学研究&#xff0c;支持数据可视化&#xff0c;以及决策制定。数据集提供了丰富的信息…

13 mysql date/time/datetime/year 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 datetime/date/time/year 类类型…

RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器

一、说明 深度学习往往感觉像是在雪山上找到自己的道路。拥有坚实的原则会让你对做出决定更有信心。我们都去过那里 在上一篇文章中&#xff0c;我们彻底介绍并检查了 LSTM 单元的各个方面。有人可能会争辩说&#xff0c;RNN方法已经过时了&#xff0c;研究它们是没有意义的。的…

如何增强客户支持?用全渠道聊天机器人

您的用户在哪里&#xff1f;您是否想拥有源源不断的客户&#xff1f;全渠道聊天机器人可确保您在他们需要的地方为他们提供一致的客户支持&#xff01; 自技术出现以来&#xff0c;消费者行为已经完全改变。这意味着企业与用户互动和提供客户支持的方式也发生了变化。现在&…

Spring 系统架构

Spring总共大约有 20个模块&#xff0c;由1300多个不同的文件构成。而这些组件被分别整合在核心容器&#xff08;CoreContainer&#xff09;、AOP&#xff08;Aspect Oriented Programming&#xff09;和设备支持&#xff08;Instrmentation&#xff09;、数据访问及集成&#…

文心一言放出的“时代礼物”,藏着中国科技的黄金机会

8月31日&#xff0c;第一批国产大模型通过了“生成式人工智能备案”&#xff0c;可以开放公众服务。 一石激起千层浪&#xff0c;对AIGC强烈好奇&#xff0c;为国产应用疯狂打call&#xff0c;文心一言对话刷屏朋友圈&#xff0c;普通人和科技圈都嗨翻了。 不到24小时&#xff…

硬件SPI口扩展

在工控板设计中&#xff0c;经常会遇到扩展IO。具有相同的功能电路板接口相同&#xff0c;所以很容易采用排线方式连接到CPU主控板上&#xff0c;这种排线连接&#xff0c;我称之为总线。 现在的CPU引脚多&#xff0c;不扩展IO&#xff0c;使用模拟SPI&#xff0c;也可以实现&…

【力扣每日一题】2023.9.2 最多可以摧毁的敌人城堡数量

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这道题难在阅读理解&#xff0c;题目看得我匪夷所思&#xff0c;错了好多个测试用例才明白题目说的是什么。 我简单翻译一下就是寻找1和…

15000字、6个代码案例、5个原理图让你彻底搞懂Synchronized

Synchronized 本篇文章将围绕synchronized关键字&#xff0c;使用大量图片、案例深入浅出的描述CAS、synchronized Java层面和C层面的实现、锁升级的原理、源码等 大概观看时间17分钟 可以带着几个问题去查看本文&#xff0c;如果认真看完&#xff0c;问题都会迎刃而解&…

03_nodjs_npm的使用

03 【npm的使用】 1.包和npm 1.1 什么是包 由于 Node 是一套轻内核的平台&#xff0c;虽然提供了一系列的内置模块&#xff0c;但是不足以满足开发者的需求&#xff0c;于是乎出现了包&#xff08;package&#xff09;的概念&#xff1a; 与核心模块类似&#xff0c;就是将一…

[学习笔记]斜率优化dp 总结

前言&#xff1a; 我们学过不少优化类的算法了&#xff0c;大部分都是基于凸函数的性质给出的优化&#xff0c;比如Slope Trick&#xff0c;Wqs二分&#xff0c;又比如今天的斜率优化&#xff08;不知道什么时候会有空把Slope Trick写掉&#xff09; 正文&#xff1a; 我们考…

这个在线网站让你三分钟制作出一份精美简历

今天&#xff0c;我要向大家推荐一个神奇的在线工具网站&#xff0c;它能够提供免费简历模板、简历范文&#xff0c;支持在线编辑&#xff0c;并且一键下载为PDF。这个工具让你的简历制作变得轻松便捷&#xff01; 首先&#xff0c;这个网站的简历模板非常丰富多样。无论你是刚…

bazel构建原理

调度模型 传统构建系统有很多是基于任务的&#xff0c;例如 Ant&#xff0c;Maven&#xff0c;Gradle。用户可以自定义"任务"(Task&#xff09;&#xff0c;例如执行一段 shell 脚本。用户配置它们的依赖关系&#xff0c;构建系统则按照顺序调度。 基于 Task 的调度…

揭秘亚马逊Amazon测评,掌握细节和技巧,提升产品销量和评论数量

亚马逊是全球最大的跨境电商平台&#xff0c;拥有全球65个国家的几十个网站。对于跨境卖家来说&#xff0c;亚马逊是最值得选择的平台之一。 亚马逊的八大站点分别是美国、加拿大、墨西哥、欧洲、澳大利亚、日本、中东和巴西。 美国站点是全球最大的零售市场&#xff0c;拥有…

区块链实验室(18) - 用FISCO BCOS架设1个无标度网络

FISCO技术文档提供1个4节点的网络案例&#xff0c;这4个节点构成1个强连通图。强连通图在现实中通常是不存在的。 本文用FISCO架设1个网络&#xff0c;该网络由100个节点构成1个无标度(scale free)网络&#xff0c;如下图所示。 1 用FISCO工具构建1个100节点的初始网络 FISCO提…

Jenkins java8安装版本安装

一、首先准备Jenkins、Jdk8、Tomcat9安装包 根据Jenkins官网介绍&#xff0c;Jenkins支持Java8的版本如下&#xff1a; 我们选择2.164版本进行安装&#xff0c;根据版本号支持输入下载地址&#xff1a;https://archives.jenkins.io/war/2.164/jenkins.war&#xff0c;进行下载…

【牛客网题目】合并两个排序的链表

目录 描述 题目分析 描述 输入两个递增的链表&#xff0c;单个链表的长度为n&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围&#xff1a;0≤n≤1000&#xff0c;1000≤节点值≤1000 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂…