算法---滑动窗口练习-3(水果成篮)

news2024/11/16 17:58:30

水果成篮

  • 1. 题目解析
  • 2. 讲解算法原理
  • 3. 编写代码

1. 题目解析

题目地址:水果成篮

在这里插入图片描述

2. 讲解算法原理

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
算法的主要思想是使用滑动窗口来维护一个包含最多两种水果的子数组。定义两个指针 left 和 right 分别表示窗口的左边界和右边界。还定义了一个数组 hash 来记录水果的出现次数。

算法的流程如下:

  1. 初始化 left、right、len、count 为0,hash 数组的所有元素初始化为0。
  2. 当 right 小于数组 fruits 的长度时,执行以下步骤:
  • 如果 hash[fruits[right]] 等于0,表示当前水果在窗口内尚未出现过,将 count 增加1。
  • 将 hash[fruits[right]] 的值加1,表示进入窗口。
  • 当 count 大于2时,表示窗口内包含了超过两种不同的水果,需要调整窗口的左边界
    • 将 hash[fruits[left]] 减1
    • 如果 hash[fruits[left]] 等于0,表示左边界的水果已经全部移出窗口,将 count 减1
    • 将 left 右移一位。
  • 计算当前窗口的长度 right - left + 1,并将其与 len 中的最大值进行比较,更新 len
  • 将 right 右移一位
  1. 返回 len,即为最多只包含两种不同水果的子数组的最大长度。

3. 编写代码

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int hash[100001]={0};
        int left=0,right=0,len=0,count=0;
        while(right<fruits.size())
        {
            if(hash[fruits[right]]==0)
            count++;
            hash[fruits[right]]++;//进窗口
            while(count>2)//判断
            {
                hash[fruits[left]]--;   
                if(hash[fruits[left]]==0)
                {
                    count--;
                }
            left++;
            }
            len=max(len,right-left+1);
            right++;
        }   
        return len;
    }
};

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

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

相关文章

【新书推荐】29.1 32位汇编基本概念

第二十九章 32处理器体系结构 这一章我们将讲述32处理器体系结构。包括32位计算机的一些基本概念&#xff0c;32位处理器&#xff0c;程序加载执行的过程&#xff0c;32位计算机的硬件组成和输入输出系统。 29.1 基本概念 本节内容&#xff1a; ■实模式与保护模式 ■操作系…

Css提高——flex布局及其相关属性

目录&#xff1a; 1、传统布局与flex布局的区别 2、flex的布局原理 3、flex常见的父项属性 3.1、flex-direction &#xff1a;设置主轴的方向 3.2、justify-content 设置主轴上的子元素排列方式 3.3、flex-wrap 设置子元素是否换行 3.4、align-items 设置侧轴上的子元素排…

北京保险服务中心携手镜舟科技,助推新能源车险市场规范化

2022 年&#xff0c;一辆新能源汽车在泥泞的小路上不慎拖底&#xff0c;动力电池底壳受损&#xff0c;电池电量低。车主向保险公司报案&#xff0c;希望能够得到赔偿。然而&#xff0c;在定损过程中&#xff0c;保司发现这辆车的电池故障并非由拖底事件引起&#xff0c;而是由于…

融入Facebook的世界:探索数字化社交的魅力

融入Facebook的世界&#xff0c;是一场数字化社交的奇妙之旅。在这个广袤的虚拟社交空间中&#xff0c;人们可以尽情展现自己、分享生活&#xff0c;与全球朋友、家人和同事保持紧密联系&#xff0c;共同探索社交互动的乐趣与魅力。让我们深入了解这个世界的魅力所在&#xff1…

Docker 安装部署MySQL教程

前言 Docker安装MySQL镜像以及启动容器&#xff0c;大致都是三步&#xff1a;查询镜像–>拉取镜像–>启动容器 1、查询镜像 docker search mysql2、拉取镜像 拉取镜像时选择stars值较高的 docker pull mysql:5.7 #这里指定拉取对应的版本Mysql5.7&#xff0c;没有指…

冒泡排序,详详解解

目录 基本概念&#xff1a; 上图&#xff1a; 核心思路&#xff1a; 基本步骤&#xff1a; 关键&#xff1a; 代码核心&#xff1a; 补充&#xff1a; 代码&#xff08;规范&#xff09; &#xff1a; 代码&#xff08;优化&#xff09;&#xff1a; 今天我们不刷力扣了&…

Docker出现容器名称重复如何解决

假如你的重复容器名称是mysql5 删除已存在的容器&#xff1a;如果你不再需要那个已经存在的名为“mysql5”的容器&#xff0c;你可以删除它。使用下面的命令&#xff1a; docker rm -f mysql5这条命令会强制删除正在运行的容器。一旦容器被删除&#xff0c;你就可以重新使用这个…

计算数据集的几何平均数geometric_mean

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算数据集的几何平均数 geometric_mean [太阳]选择题 geometric_mean的作用是&#xff1f; import statistics a [1, 2, 3, 4] average_a statistics.geometric_mean(a) print(average_a)…

软考高级:遗留系统演化策略(集成、淘汰、改造、继承)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

14.WEB渗透测试--Kali Linux(二)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;13.WEB渗透测试--Kali Linux&#xff08;一&#xff09;-CSDN博客 netcat简介内容:13.WE…

HNU计算机系统·汇编进阶

知识回顾&#xff1a; 寻址&#xff1a; 其中&#xff0c;比例因子S&#xff0c;只能是1&#xff0c;2&#xff0c;4&#xff0c;8中的数&#xff0c;这是因为在LEA的独立电路中使用移位寄存器 上节课的补充&#xff1a; mov部分: mov value , %eax mov $value , %eax 第一条…

【阅读论文】智能数据可视分析技术综述

智能数据可视分析技术综述 文章结构 中文引用格式: 骆昱宇, 秦雪迪, 谢宇鹏, 李国良. 智能数据可视分析技术综述. 软件学报, 2024, 35(1): 356–404. http://www.jos.org.cn/1000-9825/6911.htm

Linux常用操作命令和服务器硬件基础知识

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Spring Cloud部署篇2——Docker Compose部署至CentOS云服务器

一、项目介绍 系统模块 com.mingink |--mingink-api // 接口模块 | └──mingink-api-system // 系统接口 |--mingink-common // 通用模块 | └──mingink-common-core // 系统接口 |--mingink-gateway…

二叉树最长路径问题(x+1,x++,++x 问题详解)

首先遇到的问题是&#xff0c;在二叉树求最短路径中&#xff0c;DFS参数x的传入导致的结果不同问题 #include<iostream> #include<iomanip> #include<cstring> using namespace std; int maxi; char path[1000],ans[1000]; typedef struct BiTLnode{char da…

Restormer: Efficient Transformer for High-Resolution Image Restoration

Abstract 由于卷积神经网络&#xff08;CNN&#xff09;在从大规模数据中学习可概括的图像先验方面表现良好&#xff0c;因此这些模型已广泛应用于图像恢复和相关任务。最近&#xff0c;另一类神经架构 Transformer 在自然语言和高级视觉任务上表现出了显着的性能提升。虽然 T…

SpringMVC基本原理

第一章&#xff1a;Java web的发展历史 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是&#xff1a;JSPJavaBean的模式&#xff0c;它的核心是Jsp页面&#xff0c;在这个页面中&#xff0c;Jsp页面负责整合页面和JavaBean&#xff08;业务逻辑&#xff09;&…

23.1 微服务理论基础

23.1 微服务基础 1. 微服务介绍2. 微服务特点3. 微服务优缺点4. 微服务两大门派5. 微服务拆分6. 微服务扩展6.1 服务扩展6.2 按需扩展7. 微服务重要模块******************************************************************************************************************

自然语言处理实验2 字符级RNN分类实验

实验2 字符级RNN分类实验 必做题&#xff1a; &#xff08;1&#xff09;数据准备&#xff1a;academy_titles.txt为“考硕考博”板块的帖子标题&#xff0c;job_titles.txt为“招聘信息”板块的帖子标题&#xff0c;将上述两个txt进行划分&#xff0c;其中训练集为70%&#xf…

超薄片式厚膜电阻

超薄片式厚膜电阻器具有许多碳电阻器特性;它们可以做得很小&#xff0c;而且大批量的成本非常低。同时厚膜电阻器具有高达10TW&#xff08;太欧姆&#xff09;的高电阻值、非常高的温度性能和高电压能力&#xff0c;并且本质上是无感的。它们适用于医疗、航空航天和井下&#x…