904. 水果成篮(滑动窗口)

news2024/11/16 1:40:50

目录

一、题目

二、代码


一、题目

 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

二、代码

  • 题目实质:找出一个最长的子数组的长度,要求子数组中不超过两种类型的水果
  • 哈希表+双指针 
class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int _MaxCount = INT_MIN;
        int _Sum = 0;//总的水果种类

        vector<int>FruitType(100001, 0);//存放水果的种类
        vector<int>FruitCount(100001, 0);//不同种类水果的数量
        for (int left = 0, right = 0; right < fruits.size(); right++)
        {
            ++FruitCount[fruits[right]];//进窗口,对应种类的水果数量+1
            if (FruitType[fruits[right]] == 0)//如果某种水果的数量是0
            {
                FruitType[fruits[right]] = 1;
                _Sum++;//总的水果种类+1
            }
            if (_Sum <= 2)
            {
                _MaxCount = max(_MaxCount, right - left + 1);//更新
                continue;
            }
            if (_Sum > 2)//判断,水果种类大于2
            {
                _MaxCount = max(_MaxCount, right - left);//更新(次数fruits[right]处是第3种类型,所以左闭右开)
                int mark = fruits[left];

                while (fruits[left] == mark)//left右移,将连续相同的种类出窗口
                {
                    ++left;
                    --FruitCount[fruits[left - 1]];
                }

                if (FruitCount[fruits[left - 1]] == 0)//当移动到某种类水果数量为0的时候
                {
                    FruitType[fruits[left - 1]] = 0;//将不存在对应的种类
                    --_Sum;//总的水果种类-1
                }
            }
        }
        return _MaxCount;
    }
};

改进:

class Solution {
public:
    int totalFruit(vector<int>& f) 
    {
        int _MaxCount = INT_MIN;
        unordered_map<int, int> hash;//下标表示水果的种类,存放某种类水果数量
        for (int left = 0, right = 0; right < f.size(); right++)
        {
            ++hash[f[right]];//进窗口
            while (hash.size() > 2)
            {
                //出窗口
                --hash[f[left]];//某种类水果数量-1
                if (hash[f[left]] == 0)//如果某种类水果数量为0,则删除该种类
                {
                    hash.erase(f[left]);
                }
                left++;
            }
            _MaxCount = max(_MaxCount, right - left + 1);
        }

        return _MaxCount;
    }
};

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

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

相关文章

【XOR秘钥破解】异或加密秘钥破解

1、代码 # -*- coding:utf-8 -*- import binasciioriginal_text input("请输入XOR加密前&#xff08;字 符 串&#xff09;&#xff1a;") encrypted_text input("请输入XOR加密后&#xff08;十六进制&#xff09;&#xff1a;")# 先将original_text文…

P1004 [NOIP2000 提高组] 方格取数

[NOIP2000 提高组] 方格取数 - 洛谷 用四维dp数组存储&#xff0c;如果两个路线走到重复点&#xff0c;减去一个当前位置的值即可。 #include <bits/stdc.h> using namespace std; const int N 11; int grid[N][N] {0}; int dp[N][N][N][N] {0}; int n, i, j, tmp; v…

中级职称评审为什么要找机构?甘建二给你分析

职称申报为什么要找机构代理呢&#xff1f;主要是机构可以帮助整理业绩和各种申报材料&#xff0c;而且还可以帮忙网上申报。让您不会错过申报时间什么的&#xff0c;平时个人都是上班太忙了&#xff0c;没有空准备申报材料之类的各种&#xff0c;而且随时掌握申报信息&#xf…

基于springboot零食商城

基于springboot零食购物商城 摘要 基于Spring Boot的零食商城是一个现代化的电子商务平台&#xff0c;旨在为零食爱好者提供便捷的购物体验。该平台使用Spring Boot框架构建&#xff0c;以确保高效的开发和部署。它提供了用户注册、登录、个性化账户管理&#xff0c;以及展示各…

ubuntu18设置root密码

Ubuntu18启用root设置密码 第一步&#xff0c;使用sudo -i命令进入超级用户。 第二步&#xff0c;输入命令passwd root&#xff0c;进入root密码设置。 第三步&#xff0c;输入root的密码。 第四步&#xff0c;再次输入root密码进行确认。 若是修改其他用户的密码&#xff0c;可…

牛客TOP101-判断链表中是否有环

前言 本文以Java为语言讲解【判断链表中是否有环】这一题&#xff0c;题目来源【牛客TOP101】 题目描述 输入用例 解题思路 Hash表法 对于这道题&#xff0c;比较容易想到的可能是使用hash表&#xff0c;因为如果是有环&#xff0c;那么就意味着&#xff0c;在遍历过程中…

c++之类和对象

1.auto 可以自动推导结果的类型 typeid()可以打印类型 引用也可以 auto真正的价值可以简化迭代器的写法 并且auto定义的变量必须初始化。 不能做参数 返回值也不可以用auto auto不能用来声明数组 如果想要修改要用引用且指针不好解决。 c11之后的nullptr 以后再用空指针用nul…

qt采用C++/CLI 方式调用C#dll的封装方法(高阶应用)

简单讲讲需求&#xff1a;cpp作为主程序&#xff0c;c#作为第三方程序被调用&#xff0c;并且需要在c#代码里调用主程序里的方法 C#写的dll是没有dllMain入口函数的&#xff0c;是一种中间语言&#xff0c;需要.Net运行时进行做本地化工作&#xff0c;因此如果要调用C#写的dll…

OpenStack云计算平台实战-----创建空白虚拟机

1、创建空白虚拟机 需要注意的步骤会截图一下&#xff0c;其它的基本都是下一步&#xff0c;默认的即可 建议将虚拟机命名为自己的名字加后缀 将处理器数量和每个处理器的内核量都修改为2 将虚拟机的内存设置为8G&#xff0c;不然不够用 将指定磁盘大小设置为200G&#xff0c;…

面试题:什么是微服务 ?

文章目录 微服务是什么微服务是什么样的服务化的前提服务的发布与引用声明式Restful API服务的注册与发现一致性与可用性注册方式存储结构服务健康监测状态变更通知 服务的远程通信网络I/O的处理传输协议序列化方式 注册中心如何保障稳定性节点信息的保障服务节点的摘除服务节点…

微信分销小程序商城的作用是什么

众人拾柴火焰高&#xff0c;分销商城值得是商家通过一定比列的佣金或奖品激励会员或用户分销商品/服务的手段&#xff0c;以低成本获得高收益&#xff0c;也成为不少线上线下商家寻求增长的一种方法。 商家难以完善“引流拓客-转化-留存-复购-裂变-分享”等路径&#xff0c;导…

游戏反虚拟框架检测方案

游戏风险环境&#xff0c;是指独立于原有设备或破坏设备原有系统的环境。常见的游戏风险环境有&#xff1a;iOS越狱、安卓设备root、虚拟机、虚拟框架、云手机等。 因为这类风险环境可以为游戏外挂、破解提供所需的高级别设备权限&#xff0c;所以当游戏处于这些设备环境下&am…

Element UI 密码输入框--可切换显示隐藏,自定义图标

<el-form-item prop"password"><el-inputkeyup.enter.native"login"placeholder"密码"v-model"formData.password":type"showPassword ? text : password"><i slot"suffix" click"switchPas…

策略模式在社会中的应用

文章目录 &#x1f31f; 如何将设计模式策略模式运用到社会当中&#x1f34a; 什么是策略模式&#x1f34a; 策略模式在社会中的应用&#x1f389; 1. 政治选举&#x1f389; 2. 商业竞争&#x1f389; 3. 教育培训 &#x1f34a; 策略模式的优缺点&#x1f389; 优点&#x1f…

SSM - Springboot - MyBatis-Plus 全栈体系(三十三)

第八章 项目实战 终极实战&#xff1a;SpringBoot 版微头条实战 一、微头条案例介绍 1. 微头条业务简介 用户功能 注册功能登录功能jwt 实现 头条新闻 新闻的分页浏览通过标题关键字搜索新闻查看新闻详情新闻的修改和删除 2. 技术栈介绍 2.1 前端技术栈 ES6 作为基础 J…

操作系统——信号量机制(王道视频p30、课本ch6)

1.记忆有技巧&#xff1a;PV操作 —— wait,signal ——肯定是先申请/等待&#xff0c;再释放 2.这里特别指出 记录型信号量就是 后面会重点研究的内容

软件测试肖sir__python之ui自动化实战和讲解(03)

python之ui自动化实战和讲解 一、讲解常见控件定位 链接&#xff1a;http://cms.duoceshi.cn/cms/manage/login.do 1、定位文本框&#xff0c;密码框&#xff0c;按钮 2. 输入 &#xff1a;send_keys()方法 3、点击 &#xff1a;click&#xff08;&#xff09; 方法 案例&…

uniapp在线预约到家按摩系统安装部署二次开发 可以搭建H5公众号+小程序+APP

后端Thinkphp框架开发。前端采用uni-app开发&#xff0c;适配多端&#xff08;小程序&#xff0b;公众号H5&#xff0b;APP&#xff09;源码全开源。 Nginx1.22.1Mysql5.6php7.3redis扩展 支持h5、公众号、小程序、APP&#xff0c;提供相关教程和详细功能文档&#xff01; 含开…

LeetCode算法刷题(python) Day41|09动态规划|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 动规五部曲LeetCode 509. 斐波那契数LeetCode 70. 爬楼梯LeetCode 746. 使用最小花费爬楼梯 动规五部曲 确定dp数组以及下标的含义确定递归公式dp数组如何初始化确定遍历顺序举例推导dp数组 LeetCode 509. 斐波那契数 力扣题目链接 本题最直观是用递归方法 class Sol…

GIL全局解释器锁

文章目录 GIL全局解释器锁一、引入&#xff1a;二、GIL介绍三、GIL与Lock四、GIL与多线程总结 GIL全局解释器锁 一、引入&#xff1a; 首先要明白&#xff0c;GIL并不是Python的一个特性&#xff0c;其实在我们通常所称呼的Python解释器&#xff0c;其实是CPython解释器&…