leetcode 904 水果成篮

一、题目描述

二、解题思路

题意解析:

fruit[i]是指i位置树上果实的种类,例如fruits[0]为1,代表0位置树上的是1号果实。只有两个篮子,每个篮子只能装同种果实,比如只能装1号、2号等等。一棵树只能摘一个水果,题目要求最多可以摘的水果数量。

整体思路:

题目要求最多可以摘的水果数量。也就是求只有两种类型的最长连续子串的长度,我们可以借助滑动窗口的思想来解决这个问题。

具体思路:

哈希表nums用于记录每一种类型的水果采摘的个数,用于模拟篮子。

<1>进窗口:进入哈希表nums

//进窗口

nums[fruits[right]]++;

<2>出窗口:退出哈希表,left右移

//出窗口

while(nums.size()>2){

nums[fruits[left]]--;

if (nums[fruits[left]]==0) nums.erase(fruits[left]);

left++;

}

<3>更新:更新length

//更新

length=max(length,right-left+1);

三、代码实现

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

cpp 复制代码
class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        //滑动窗口
        int left,right,n=fruits.size();
        map<int,int> nums;
        int length=0;
        for(left=0,right=0;right!=n;right++){
            //进窗口
            nums[fruits[right]]++;
            //出窗口
            while(nums.size()>2){
                nums[fruits[left]]--;
                if (nums[fruits[left]]==0)  nums.erase(fruits[left]);
                left++;
            }
            //更新
            length=max(length,right-left+1);
        }
        return length;
    }
};
相关推荐
独自破碎E3 分钟前
机器人Java后端算法笔试题解析
java·windows·算法
计算机安禾5 分钟前
【c++面向对象编程】第45篇:萃取(Traits)技术与策略类:STL源码中的智慧
开发语言·c++
运筹vivo@6 分钟前
3043. 最长公共前缀的长度(Leetcode 每日一题)
c++·算法·leetcode·职场和发展·每日一题
杜子不疼.9 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
石山代码10 小时前
C++ 内存分区 堆区
java·开发语言·c++
心中有国也有家10 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
绝知此事11 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
碧海银沙音频科技研究院11 小时前
通话AEC与语音识别AEC的软硬回采链路
深度学习·算法·语音识别
csdn_aspnet12 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展