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

如何正确检查两个数组是否满足元素匹配的数量要求?

解决数组元素频次匹配问题

要解决这个既要检查元素存在、又要限制出现次数的问题,核心是统计第一个数组的元素频次,再逐个校验第二个数组的元素是否在频次范围内。

实现思路

  1. 先统计第一个数组中每个元素的出现次数,用Map存储键值对(元素为键,出现次数为值)
  2. 遍历第二个数组的每一个元素:
    • 如果元素不在Map里,或者剩余次数已经为0,直接返回false
    • 否则,把该元素的剩余次数减1
  3. 所有元素都校验通过后,返回true

代码实现

function canMatch(firstArr, secondArr) {
  // 统计第一个数组的元素频次
  const countMap = new Map();
  for (const item of firstArr) {
    countMap.set(item, (countMap.get(item) || 0) + 1);
  }

  // 遍历第二个数组校验
  for (const item of secondArr) {
    const currentCount = countMap.get(item);
    if (!currentCount) { // 元素不存在或次数已耗尽
      return false;
    }
    countMap.set(item, currentCount - 1);
  }

  return true;
}

// 测试案例
const first1 = [1,2,3,4];
const second1 = [1,2];
console.log(canMatch(first1, second1)); // 输出: true

const first2 = [1,2,3,4];
const second2 = [3,3];
console.log(canMatch(first2, second2)); // 输出: false

// 额外测试:正常的重复元素场景
const first3 = [2,2,3,3,3];
const second3 = [2,3,3];
console.log(canMatch(first3, second3)); // 输出: true

为什么这个方法可行?

  • 用Map统计频次的时间复杂度是O(n)(n是第一个数组的长度),遍历校验的时间复杂度是O(m)(m是第二个数组的长度),整体效率很高
  • 每次校验后实时扣减频次,能准确跟踪剩余可用的元素数量,避免了原代码只检查存在性的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:45:42