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

如何检查数组是否恰好包含特定整数集合?以1、0、0、1为例

检查数组是否恰好包含特定整数集合的方案

嘿,这个问题很常见,我来给你拆解两种场景的解决方案——先搞定你提到的[1,0,0,1]的具体需求,再讲通用的检查方法。

一、针对特定需求:检查数组是否恰好包含1、0、0、1

这里的核心是元素种类和对应出现次数完全匹配,不能多也不能少,推荐两种简单的实现思路:

1. 排序后直接对比

把原数组和目标数组都排序,然后比较两者是否完全一致。这种方法代码简洁,适合元素数量不多的场景:

// JavaScript示例
function matchesTarget(array) {
  // 先判断长度,长度不对直接排除
  if (array.length !== 4) return false;
  // 数字排序要传比较函数,避免字符串排序的坑
  const sortedArr = array.sort((a, b) => a - b);
  const targetSorted = [0, 0, 1, 1].sort((a, b) => a - b);
  // 逐元素对比更严谨,也可以转成字符串对比
  return sortedArr.every((val, idx) => val === targetSorted[idx]);
}

2. 统计元素出现次数

用哈希表统计每个数字的出现次数,再和目标次数对比。这种方法更灵活,能明确处理重复元素的次数要求:

// JavaScript示例
function matchesTarget(array) {
  if (array.length !== 4) return false;
  // 统计原数组元素计数
  const countMap = array.reduce((acc, num) => {
    acc[num] = (acc[num] || 0) + 1;
    return acc;
  }, {});
  // 目标计数:0出现2次,1出现2次
  const targetMap = { 0: 2, 1: 2 };
  
  // 检查所有键是否匹配,且次数一致
  const keysMatch = Object.keys(countMap).length === Object.keys(targetMap).length;
  const countsMatch = Object.keys(targetMap).every(key => countMap[key] === targetMap[key]);
  
  return keysMatch && countsMatch;
}

如果是Python的话,用标准库的Counter会更省心:

from collections import Counter

def matches_target(array):
    return Counter(array) == Counter([1, 0, 0, 1])

二、通用方案:检查数组是否恰好包含任意特定整数集合

不管目标集合是什么,核心逻辑都是验证元素的种类、每个元素的出现次数、总长度三者完全匹配,推荐两种通用方法:

1. 排序对比法

步骤:

  • 先判断原数组和目标数组的长度是否一致,不一致直接返回false
  • 对两个数组进行排序(注意数字排序要避免字符串排序的陷阱)
  • 逐元素对比,或者转成字符串/元组对比

优点:代码简洁,易理解;缺点:排序的时间复杂度是O(n log n),元素较多时效率稍低。

2. 计数统计法

步骤:

  • 同样先判断长度是否一致
  • 用哈希表(如JS的Map/对象、Python的Counter)统计原数组和目标数组的元素出现次数
  • 对比两个哈希表的键和对应的值是否完全相同

优点:时间复杂度O(n),效率更高;适合元素数量大、重复元素多的场景。

注意事项

  • 如果数组里可能包含非整数元素,要先过滤或验证类型,避免统计错误
  • 对于严格类型检查的语言(如TypeScript),要确保数组元素是number类型的整数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:53:53