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

这篇具有很好参考价值的文章主要介绍了904. 水果成篮(滑动窗口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、题目

二、代码


一、题目

 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台904. 水果成篮(滑动窗口),牛客/力扣,哈希算法,算法

二、代码

  • 题目实质:找出一个最长的子数组的长度,要求子数组中不超过两种类型的水果
  • 哈希表+双指针 
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;
    }
};

改进:文章来源地址https://www.toymoban.com/news/detail-722489.html

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

到了这里,关于904. 水果成篮(滑动窗口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode 904. 水果成篮

    力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 在你去摘水果的时候,你当前只能拥有两种种类的水果,若想拿第三种水果,就需要发下前两种水果中的一种。 我们使用哈希表来记录当前水果出现的次数,当哈希表中已经有两种水果的时候,下次再摘第三种水果,就应该

    2024年02月09日
    浏览(25)
  • 每日OJ题_算法_滑动窗口⑧_力扣76. 最小覆盖子串

    目录 力扣76. 最小覆盖子串 解析及代码 76. 最小覆盖子串 - 力扣(LeetCode) 难度 困难 给你一个字符串  s  、一个字符串  t  。返回  s  中涵盖  t  所有字符的最小子串。如果  s  中不存在涵盖  t  所有字符的子串,则返回空字符串  \\\"\\\"  。 注意: 对于  t  中重复字符,

    2024年01月23日
    浏览(29)
  • 力扣精选算法100题——找到字符串中所有字母异位词(滑动窗口专题)

    本题链接👉找到字符串中所有字母异位词 给定2个字符串s和p,找到s中所有p的变位词的字串,就是p是\\\"abc\\\",在s串中找到与p串相等的字串,可以位置不同,但是字母必须相同,比如”bca\\\",\\\"bac\\\"等,都是可以被称之为变位词。最终返回与p串字母相等但排列不同的字符串的初始索引

    2024年01月19日
    浏览(59)
  • Offer必备算法_滑动窗口_八道力扣OJ题详解(由浅到深)

    目录 滑动窗口算法介绍 ①力扣209. 长度最小的子数组 解析及代码 ②力扣3. 无重复字符的最长子串 解析及代码 ③力扣1004. 最大连续1的个数 III 解析及代码 ④力扣1658. 将x减到0的最小操作数 解析及代码 ⑤力扣904. 水果成篮 解析及代码1(使用容器) 解析及代码2(开数组) ⑥

    2024年02月20日
    浏览(39)
  • 每日OJ题_算法_滑动窗口⑦_力扣30. 串联所有单词的子串

    目录 力扣30. 串联所有单词的子串 解析及代码 30. 串联所有单词的子串 - 力扣(LeetCode) 难度 困难 给定一个字符串  s   和一个字符串数组  words 。   words  中所有字符串  长度相同 。   s   中的  串联子串  是指一个包含   words  中所有字符串以任意顺序排列连接起来的

    2024年01月21日
    浏览(34)
  • 每日OJ题_算法_滑动窗口⑥_力扣438. 找到字符串中所有字母异位词

    目录 力扣438. 找到字符串中所有字母异位词 解析及代码1 解析及代码2 438. 找到字符串中所有字母异位词 - 力扣(LeetCode) 难度 中等 给定两个字符串  s  和  p ,找到  s   中所有  p   的  异位词  的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词  指由

    2024年01月24日
    浏览(36)
  • 【双指针】滑动窗口经典例题 力扣

    无重复的最长子串LC3 中等 题目链接 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 代码: 找到字符串中所有子母异位词LC438 中等 题目链接 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序

    2024年02月07日
    浏览(34)
  • 【LeetCode:30. 串联所有单词的子串 | 滑动窗口 + 哈希表】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年01月21日
    浏览(37)
  • 力扣刷题-队列-滑动窗口最大值

    给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶: 在线性时间复杂度内解决此题? 参考:https://www.programmercarl.com/0239.%E6%BB%91%E5%8A

    2024年02月06日
    浏览(39)
  • 力扣热门100题之滑动窗口最大值【困难】

    给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包