我想找到一个数组中的对数。我写了这段代码,但并非在所有情况下都有效
function getPair(n, arr) {
let paire = 0;
let arr1 = arr.slice().sort();
let arrBack = new Array();
if (n == arr.length) {
console.log("il y a " + n + " chaussettes dans le tableau");
for (let i = 0; i < arr1.length; i+=2) {
if (arr1[i] == arr1[i+1]) {
arrBack.push(arr1[i]);
}
}
paire += arrBack.length;
}
return paire;
}
let n = 9;
let arr = [10, 20, 20, 10, 10, 30, 50, 10, 20]; // 4
console.log(getPair(n, arr));
答案 0 :(得分:0)
您可以使用哈希表
pair= {},
res;
arr.reduce((x, y) => {
var k = [x, y].join('|');
pair[k] = (pair[k] || 0) + 1;
return y;
});
res = Object.values(pair);
console.log(pair);
console.log(res);
答案 1 :(得分:0)
首先在数组let arr = [10, 20, 20, 10, 10, 30, 50, 10, 20];
中,我仅看到3对:[10, 10]
,[20, 20]
和[10, 10]
。
然后回答这个问题,我会做这样的事情:
function getPair(arr) {
console.log("il y a " + arr.length + " chaussettes dans le tableau");
let tempArr = new Array();
arr.map(n => tempArr[n] = tempArr[n]!=undefined? tempArr[n]+1:1 );
return tempArr.reduce((accumulator, currentValue) => accumulator + Math.floor(currentValue/2), 0);
}
let arr = [10, 20, 20, 10, 10, 30, 50, 10, 20];
console.log(getPair(arr));
答案 2 :(得分:0)
function getPairs(n,arr){
var paired_arr = [];
var temp_arr = [];
var temp;
arr.sort();
for(var i=0;i<arr.length;i++){
temp = arr[i];
if(i == 0 || arr[i-1] == temp){
temp_arr.push(temp);
}
else if(arr[i-1] != temp){
paired_arr.push(temp_arr);
temp_arr = [];
temp_arr.push(temp);
}
}
paired_arr.push(temp_arr);
var pairs = 0;
for(var i in paired_arr){
if(paired_arr[i].length > 1){
if(paired_arr[i].length%2 == 0){
pairs+=(paired_arr[i].length/2);
}
else{
pairs+=((paired_arr[i].length-1)/2);
}
}
}
console.log("il y a " + n + " chaussettes dans le tableau");
return pairs;
}
var arr = [10, 20, 20, 10, 10, 30, 50, 10, 20];
console.log(getPairs(9,arr));
答案 3 :(得分:0)
这是一个班轮...
let pairCount = [...arr.reduce((map, val) => map.set(val,(map.get(val) || 0) + 0.5), new Map()).values()].reduce((total, count) => total += Math.floor(count), 0)
...如果arr = [10,20,20,10,10,30,50,10,20],则执行以下操作:
arr.reduce((map,val)=> map.set(val,(map.get(val)|| 0)+ 0.5),新的Map())遍历数组,计算一个值的出现次数,并将其放置在Map中。这部分产生具有4个条目的Map,即{10 => 2、20 => 1.5、30 => 0.5、50 => 0.5}。请注意,对于找到的每个值,我只加0.5,以便整数代表对数。即10 => 2是两对10。
然后 .values()将其转换为MapIterator,仅保留{2,1.5,0.5,0.5}的值。
然后,周围的 [... 和] 将MapIterator值转换为数组,即[2,1.5,0.5,0.5]。
现在,我进一步通过 .reduce((total,count)=> total + = Math.floor(count),0)来简化此数组,该运算简单地将对总数取整,四舍五入当然每个下来都是成对的。结果为 pairCount 等于 3 。
顺便说一句,请注意,我并没有全心全意。宝贵的Chrome调试器与大量的Google搜索结合使用Array和Map函数的“工具箱”,使我能够反复尝试解决方案。