首页 > 其他分享 >leetcode 904. 水果成篮

leetcode 904. 水果成篮

时间:2024-12-09 18:59:45浏览次数:4  
标签:right 904 resLenth fruits size 成篮 leetcode numAdded left

904. 水果成篮

说白了就是:找最多包含两种元素的最长子串,返回其长度

值得注意的是,当窗口内有三种种类时,左窗口边界是要向右移动到窗口内只剩两种种类,而不是什么先进先出!比如 [1,0,1,4,1,4,1,2,3] 

法一:unordered_map

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int size = fruits.size(),resLenth = 0,left = 0,right;
        unordered_map<int,int> numAdded;
        for(right = 0;right < size;++right){
            if(numAdded.size() == 2 && numAdded.find(fruits[right]) == numAdded.end()){
                resLenth = max(resLenth,right - left);
                while(1){
                    --numAdded[fruits[left]];
                    if(numAdded[fruits[left]] == 0){
                        numAdded.erase(fruits[left]);
                        ++left;break;
                    }
                    ++left;
                }
            }
            ++numAdded[fruits[right]];
        }
        return max(resLenth,right - left);
    }
};

法二宫水三叶:不使用unordered_map,使用vector

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int size = fruits.size(),resLenth = 0;
        vector<int> numAdded(size);
        for(int right = 0,left = 0,typeCount = 0;right < size;++right){
            ++numAdded[fruits[right]];
            if(numAdded[fruits[right]] == 1)  ++typeCount;//用typeCount表示当前加了多少个种类
            while(typeCount > 2){
                --numAdded[fruits[left]];
                if(numAdded[fruits[left]] == 0)  --typeCount;
                ++left;
            }
            resLenth = max(resLenth,right - left + 1);
        }
        return resLenth;
    }
};

 

标签:right,904,resLenth,fruits,size,成篮,leetcode,numAdded,left
From: https://www.cnblogs.com/uacs2024/p/18595835

相关文章

  • leetcode543.二叉树的直径
    给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取路径[4,2,1,3]或......
  • LeetCode题集-5 - 最长回文子串(一)
    题目:给你一个字符串 s,找到 s 中最长的回文子串。这一题作为中等难度,常规解法对于大多数人应该都没有难度。但是其中也有超难的解决办法,下面我们就一起由易到难,循序渐进地来解这道题。01、暴力破解法对于大多数题目来说,在不考虑性能的情况下,暴力破解法常常是最符合人的思维......
  • (leetcode每日一题)有效的括号
    (leetcode每日一题)有效的括号题目要求思路代码总结题目给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左......
  • 代码随想录算法训练营第三十八天|leetcode322. 零钱兑换、leetcode279.完全平方数、le
    1leetcode322.零钱兑换题目链接:322.零钱兑换-力扣(LeetCode)文章链接:代码随想录视频链接:动态规划之完全背包,装满背包最少的物品件数是多少?|LeetCode:322.零钱兑换哔哩哔哩bilibili思路:感觉跟之前的方法思路差不多,就是对dp初始化的时候,我开始弄错了,应该初始成无限大,对dp[......
  • LeetCode刷题 -- 哈希表
    目录两数之和题目解析算法原理代码面试题01.02.判定是否互为字符重排题目解析算法原理代码存在重复元素题目解析算法原理代码存在重复元素II题目解析算法原理代码字母异位词分组题目解析算法原理代码两数之和题目链接题目解析算法原理法一:暴力枚举,固定......
  • 【Leetcode Top 100】94. 二叉树的中序遍历
    问题背景给定一个二叉树的根节点rootrootroot,返回它的中序遍历。数据约......
  • 【Leetcode 每日一题】782. 变为棋盘
    问题背景一个n×nn\timesnn×n的二维网络b......
  • [LeetCode] 2684. Maximum Number of Moves in a Grid
    Youaregivena0-indexedmxnmatrixgridconsistingofpositiveintegers.Youcanstartatanycellinthefirstcolumnofthematrix,andtraversethegridinthefollowingway:Fromacell(row,col),youcanmovetoanyofthecells:(row-1,col+......
  • Leetcode Hot100 | Day02 双指针
    4.移动零283.移动零给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例2:输入:nums=[0]输出:[0]题解:......
  • 详解LeetCode地下城游戏(动态规划)——区分两种状态表示形式
    地下城游戏题目链接:174.地下城游戏状态表示:按照以往题的表示,dp[i][j]表示:从起点(0,0)位置到达(i,j)位置时,所需的最小初始健康值。但是如果这么去表示,不仅要考虑到达(i,j)位置的最小初始健康值,由于魔法球的存在,还需要考虑到达(i,j)位置时的健康值,因为魔法球会对算后续位置的最小初始......