【发布时间】:2018-09-26 09:22:29
【问题描述】:
例如,我有数组:
[1,2,3,2,2,2,1,2,3]
,它与 XXXXYY 模式匹配,因为它(至少)有四个“2”和两个“1”,但我的问题是,如何检查数组是否匹配这种模式?我试过了:
const arr=[1,2,3,2,2,2,1,3,2];
const pattern=[4,2];
let m=new Map();
for(const num of arr){
if(!m[num]){
m[num]=0;
}
m[num]++;
}
let i=0;
let isMatch=true;
for(const key in m){
if(m[key]<pattern[i]){
isMatch=false;
}
i++;
}
console.log(isMatch);
但是 isMatch 是假的。有没有更简单的方法可以做到这一点?
【问题讨论】:
-
更简单?您的意思是“正确”-因为您的方法存在根本缺陷 m 将是 1:2, 2:4, 3:2 - 所以您的 for 循环为 m[key]... 得到 2, 4, 2... 因为 2= 模式中的值
-
所以,这个问题说明了是否有
n不同种类的元素具有预期的频率。如果是,那么给定的模式是可能的。
标签: javascript arrays algorithm