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;
    }
};
相关推荐
老猿讲编程3 小时前
C++中的奇异递归模板模式CRTP
开发语言·c++
.格子衫.4 小时前
022数据结构之树状数组——算法备赛
数据结构·算法·1024程序员节
黑科技Python4 小时前
生活中的“小智慧”——认识算法
学习·算法·生活
Yupureki4 小时前
从零开始的C++学习生活 16:C++11新特性全解析
c语言·数据结构·c++·学习·visual studio
紫荆鱼5 小时前
设计模式-迭代器模式(Iterator)
c++·后端·设计模式·迭代器模式
sali-tec5 小时前
C# 基于halcon的视觉工作流-章52-生成标定板
开发语言·图像处理·人工智能·算法·计算机视觉
IT古董5 小时前
【第五章:计算机视觉-项目实战之推荐/广告系统】2.粗排算法-(4)粗排算法模型多目标算法(Multi Task Learning)及目标融合
人工智能·算法·1024程序员节
熬了夜的程序员5 小时前
【LeetCode】89. 格雷编码
算法·leetcode·链表·职场和发展·矩阵
应茶茶5 小时前
C++11 核心新特性:从语法重构到工程化实践
java·开发语言·c++
對玛祷至昏6 小时前
数据结构理论知识
数据结构·算法·排序算法