JavaScript 找到数组中的所有重复数字
在给定的问题陈述中,我们需要使用JavaScript功能找到数组中的所有重复数字,该数组中有多个重复项。所以我们将使用基本的JavaScript来解决这个问题。
理解问题
问题在于找到数组中的重复数字。我们将基本上提取出出现多次的数字,并通过响应得到重复数字的数组。例如,假设我们有一个数组为[1, 1, 4, 8, 2, 2, 6, 6, 6]。在这个数组中,重复的项目是[1, 2, 6]。这个数组将是函数的输出。
解题思路
为了解决这个问题,我们将使用一个对象来记录每个数字的数量。我们将遍历数组,并对每个项目验证条件是否已经存在于对象中。如果已经存在,则将计数增加1。否则,将该项目添加到对象中,并将计数初始为1。结果将是计数大于1的数字,这就是所需的重复数字的数组。
步骤
步骤1 :我们需要找到给定数组中的重复数字,所以为了解决这个问题,我们将定义一个名为findDuplicates的函数,并在该函数中传递一个参数数组。该数组将包含重复项目。
步骤2 :在创建上述函数之后,我们将创建一个空的哈希映射或对象来存储重复数字的计数,并创建一个具有空值的数组。将其命名为duplicates,该数组将存储输入数组的重复数字。
步骤3 :现在我们在函数内部,在其中已经定义了哈希映射以存储重复数字信息。所以在此之后,我们将遍历数组中的每个元素,并检查该项是否作为哈希映射中的键存在。
步骤4 :因此,在哈希映射中,如果键存在,我们将递增计数器。否则,我们将该项添加到哈希映射中,计数初始为1。
步骤5 :在这一步中,我们将使用另一个for循环遍历哈希映射的键值对。
步骤6 :然后,我们将检查条件,如果数字的计数大于1,则将其添加到结果数组中。
示例
//Function to find the duplicate items
function findDuplicates(array) {
const countMap = {};
const duplicates = [];
for (let i = 0; i < array.length; i++) {
const num = array[i];
countMap[num] = (countMap[num] || 0) + 1;
}
for (const num in countMap) {
if (countMap[num] > 1) {
duplicates.push(Number(num));
}
}
return duplicates;
}
//Usage of the function
const numbers = [1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 8];
const result = findDuplicates(numbers);
console.log(result);
输出
[ 4, 6, 8 ]
复杂性
在一个数组中找到所有重复数字的时间复杂性为O(n),其中n是给定输入数组的大小。因为我们只需遍历给定数组一次以更新计数映射。这种方法的空间复杂度也是O(n),因为计数映射在最坏情况下可能包含所有不同的数字。
结论
因此,借助散列表或对象记录计数,我们已经找到了所有重复数字和多个数字的重复数字。借助该函数,我们可以轻松找出数组中的重复项,并创建一个新的重复项集合。