在 JavaScript 中返回数组中出现次数第二多的元素


在给定的问题陈述中,我们的任务是使用 Javascript 返回数组中出现次数第二多的元素。因此,为了解决这个问题,我们将使用 map 函数来计算每个元素的频率。

理解问题陈述

给定的问题是在给定的数组中获取出现次数第二多的元素。假设我们有一个整数数组 [1, 3, 3, 4, 4, 4],那么函数应该返回 3,因为我们可以在数组中看到 3 是数组中出现次数第二多的数字(2 次)。

上述问题的逻辑

为了解决这个问题,我们将计算数组中每个元素的频率,然后找到频率第二高的元素。如果有多个元素具有相同的最高频率,那么我们必须在它们之间返回具有第二高频率的元素。我们将使用一种数据结构,例如映射,来存储每个元素的频率计数,然后我们将按频率降序对映射的项进行排序,以找到频率第二高的项。

算法

步骤 1 - 创建一个函数,返回在给定数组中出现次数第二多的项。

步骤 2 - 使用 freq 变量存储数组中出现频率第二高的项的频率。

步骤 3 - 使用 for 循环遍历数组的元素。

步骤 4 - 使用另一个变量存储数组的当前元素。并使用 freq 数组存储其中的频繁元素。

步骤 5 - 现在对频繁元素进行排序以获得所需的结果。

步骤 6 - 检查排序后的频繁数组长度是否大于 1,并同样检查是否存在类似的元素。

步骤 7 - 如果有多个元素具有相同的最高频率。然后返回第一个元素。

步骤 8 - 否则返回给定数组中出现频率最高的元素。

算法代码

//function to return the second most frequent element
function secondMostFrequent(arr) {
   const freq = {};
   for (let i = 0; i < arr.length; i++) {
      const el = arr[i];
      freq[el] = (freq[el] || 0) + 1;
   }
   const sortedFreq = Object.entries(freq).sort((a, b) => b[1] - a[1]);
   if (sortedFreq.length > 1 && sortedFreq[0][1] === sortedFreq[1][1]) {
      // Multiple elements with the same highest frequency
      return Number(sortedFreq[1][0]);
   } else {
      return Number(sortedFreq[1][0]);
   }
}
const arr = [1, 2, 2, 3, 3, 3, 4, 4];
const arr1 = [1, 2, 3, 3, 4, 4, 5, 5, 5];
console.log(secondMostFrequent(arr));
console.log(secondMostFrequent(arr1));

复杂度

解决方案花费的时间为 O(n log n),因为存在排序操作。代码的空间复杂度为 O(n),因为我们需要在 freq 对象中保存频率计数。

结论

该解决方案提供了一种有效的方法,可以使用 Javascript 功能获得所需的结果。在这里,我们在返回之前使用 Number 方法将 freq 项的键转换为数字,以确保函数实际上返回一个数字而不是字符串。

更新于: 2023年5月18日

110 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告