📅  最后修改于: 2023-12-03 15:12:02.830000             🧑  作者: Mango
在 JavaScript 中,有时候我们需要找到数组中重复出现的元素对,并计算它们出现的次数。这是非常常见的问题,本文将介绍几种方法来解决这个问题。
我们可以遍历数组中的每个元素,使用一个对象来记录每个元素出现的次数,最后遍历对象,统计出现次数大于1的元素对的数量。
function countDuplicatePairs(arr) {
const count = {};
let pairsCount = 0;
for (let i = 0; i < arr.length; i++) {
if (count[arr[i]]) {
pairsCount += count[arr[i]];
count[arr[i]]++;
} else {
count[arr[i]] = 1;
}
}
return pairsCount;
}
const arr = [1, 2, 2, 3, 4, 4, 4, 5];
console.log(countDuplicatePairs(arr)); // 输出 3
首先,我们定义了一个空对象 count
和一个变量 pairsCount
,用于计算元素对的数量。
接下来,我们遍历数组 arr
,如果遍历到的元素已经在 count
对象中出现过,则将该元素对已经存在的次数加到 pairsCount
变量中,并将该元素在 count
对象中的出现次数加 1;否则,在 count
对象中记录该元素出现了一次。
最后,遍历 count
对象,对于出现次数大于 1 的元素对,将它们的出现次数加到 pairsCount
变量中。
我们还可以使用 Set 和 Map 来解决这个问题。具体步骤如下:
arr
,得到一个新数组 distinctArr
。arr
中的出现次数。distinctArr
,对于每个元素,统计它在 arr
中的出现次数。pairsCount
中。pairsCount
。function countDuplicatePairs(arr) {
const distinctArr = [...new Set(arr)];
const count = new Map();
let pairsCount = 0;
for (let i = 0; i < arr.length; i++) {
if (count.has(arr[i])) {
count.set(arr[i], count.get(arr[i]) + 1);
} else {
count.set(arr[i], 1);
}
}
for (let i = 0; i < distinctArr.length; i++) {
const n = count.get(distinctArr[i]);
if (n > 1) {
pairsCount += n * (n - 1) / 2;
}
}
return pairsCount;
}
const arr = [1, 2, 2, 3, 4, 4, 4, 5];
console.log(countDuplicatePairs(arr)); // 输出 3
在这个实现中,我们首先使用 Set 来去重数组 arr
,得到一个新数组 distinctArr
。然后,我们使用 Map 来记录每个元素在 arr
中的出现次数。
接下来,我们遍历 distinctArr
,对于每个元素,统计它在 arr
中的出现次数,并计算出它可以组成的元素对数量。这个数量计算公式是 $\frac{n\times(n-1)}{2}$,其中 $n$ 是该元素在 arr
中出现的次数。最后,我们将所有元素对数量累加到 pairsCount
变量中,并返回该变量。
本文介绍了两种方法来计算数组 JavaScript 中重复对的数量。第一种方法使用对象来计数,第二种方法使用 Set 和 Map 来计数。两种方法各有优劣,具体可以根据实际情况选择合适的方法。