You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试Javascript中使用Map实现的水果成篮问题代码错误

水果成篮问题代码错误定位与修复

核心错误点

  • 存储逻辑错误:你定义的fruitTypes Map中,value错误存储了遍历到当前位置的累计总长度++fruitCount,而非对应水果类型在当前窗口内的出现次数,导致后续删除旧水果类型时,扣减的水果数量完全不符合实际窗口情况。
  • 窗口调整逻辑错误:你直接删除Map迭代的第一个key(Map按插入顺序返回的第一个类型),而非滑动窗口最左侧需要被移出的水果类型,完全不符合「最多包含2种不同元素的最长子数组」的滑动窗口调整规则。
  • 最大值更新逻辑错误:你仅在添加新水果时更新最大值,窗口调整为合法状态后没有重新计算窗口长度更新最大值,会漏掉合法窗口的更大值。

修正后的参考代码

var totalFruit = function(fruits) {
    const fruitTypes = new Map();
    let left = 0;
    let maxFruits = 0;
    for (let right = 0; right < fruits.length; right++) {
        // 统计当前右边界水果的出现次数
        const currFruit = fruits[right];
        fruitTypes.set(currFruit, (fruitTypes.get(currFruit) || 0) + 1);
        // 水果类型超过2种时移动左边界缩小窗口
        while (fruitTypes.size > 2) {
            const leftFruit = fruits[left];
            const leftCount = fruitTypes.get(leftFruit);
            if (leftCount === 1) {
                fruitTypes.delete(leftFruit);
            } else {
                fruitTypes.set(leftFruit, leftCount - 1);
            }
            left++;
        }
        // 此时窗口合法,更新最大值
        maxFruits = Math.max(maxFruits, right - left + 1);
    }
    return maxFruits;
};

验证说明

针对测试用例[3,3,3,1,2,1,1,2,3,3,4],修正后代码会正确识别到子数组[1,2,1,1,2]等合法窗口,最终返回正确结果5。

内容的提问来源于stack exchange,提问作者Rohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:39:03