Leet code 904 水果成篮

文章讲述了如何使用滑动窗口策略和unordered_map数据结构解决一个关于数组中最多能包含多少种不同种类水果的问题,通过维护一个hash表来记录每种水果的数量,当种类数超过2时,逐个移除最早出现的种类直到种类数减为2。
摘要由CSDN通过智能技术生成

解题思路:滑动窗口

创建hash表记录水果的种类和数量 

两个指针left 和 right 从数组起始位置开始滑动,right在循环内++

hash[fruits[right]]++  进窗口

然后判断 hash表中的种类是否大于2

一旦大于2就要想办法出窗口  出窗口需要将hash表中种类重回2种 这时候就要动用left指针

然后更新结果 

代码如下

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;
    }
};

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值