JavaScript 找到数组中出现次数最少的元素

JavaScript 找到数组中出现次数最少的元素

在这个程序中,我们给定一个整数或元素的数组,我们需要返回数组中出现次数最少的元素,如果有多个出现次数最少的元素,我们可以返回其中任意一个。下面我们将会看到具体的示例。

问题介绍

在给定的问题中,我们需要找到数组中出现次数最少的元素。我们给定了一个包含重复数字的数组,我们需要计算每个元素的出现次数,然后返回出现次数最少的元素。如果有多个元素出现次数最少,则我们可以返回其中任意一个。让我们看一些示例:

例如,我们给定一个大小为num的数组。

Input:
Num = 8
Array = {1, 3, 3, 5, 5, 4, 4, 4}
Output: 1

它以最少的次数呈现最小数量的时间(即,所有元素中只有1次出现),其中有3次出现2次,5次出现2次,而4次出现3次。 让我们看看另一个示例,在这个示例中,我们有多个元素以最少次数出现。

Input:
Num =  2
Array = {3, 1}
Output:
3 or 1 (as both 1 and 2 present 1 time)

方法1:暴力破解

在此方法中,我们使用嵌套的for循环。第一个for循环是为了逐个考虑每个元素,第二个for循环是用于计算每个元素的频率,并维护一个元素计数(element count),它存储元素的频率,并在每次遇到新元素时进行更新,而leastCountNum存储具有最少频率的数字。

示例

JavaScript程序,用于找出数组中出现频率最低的元素。

function leastFrequent(array, num){
   var countMin = num+1;
   var count = 0;
   var leastCountNum = -1;
   for (var i = 0; i < num; i++) {
      count = 0;
      for(let j = 0; j < num; j++){
         if(array[i] == array[j]){
            count++;
         }
      }
      if(count < countMin){
         countMin = count;
         leastCountNum = array[i];
      }
   }
   return leastCountNum;
}
var num = 8;
var array = [1, 3, 3, 5, 5, 4, 4, 4];
console.log("Least Frequent Value is: "+ leastFrequent (array, num) );

时间复杂度为O(N2),其中N是数组的大小。

空间复杂度为O(1)。

现在看一下它的优化解决方案。

方法2:使用排序函数

这里我们首先对数组进行排序,然后线性遍历数组并检查元素的频率计数,根据它更新最小计数数值。

示例

function leastFrequent(array, num){
   array.sort(); //sort an array using sort function

   // find the min frequency using
   // linear traversal

   var countMin = num+1, leastCountNum = -1;
   var count = 1;
   for (var i = 1; i < num; i++) {
      if (array[i] == array[i - 1]){
         count++;
      } else {
         if (count < countMin) {
            countMin = count;
            leastCountNum = array[i - 1];
         }
         count=1;
      }
   }

   // checking for the last element is least frequent or not
   if (count < countMin) {
      countMin = count;
      leastCountNum = array[num - 1];
   }
   return leastCountNum;
}
var num = 8;
var array = [2, 3, 3, 5, 5, 4, 4, 4];
console.log("Least Frequent Value is: "+ leastFrequent (array, num) );

时间复杂度为O(NlogN),其中N是数组的大小。

空间复杂度为O(1)。

方法3:使用哈希表

在这种方法中,我们将元素和它们的频率计数作为键值对存储在哈希表中。然后遍历哈希表并打印具有最低值的键。

示例

function leastFrequent(array, num){
   var hash = new Map();
   for (var i = 0; i < num; i++) {
      if(hash.has(array[i]))
      hash.set(array[i], hash.get(array[i])+1)
      else
      hash.set(array[i], 1);
   }

   // find the least frequent value uding hash map function
   var countMin = num+1,leastCountNum = -1;
   hash.forEach((value, key) => {
      if (countMin >= value) {
         countMin = value;
         leastCountNum = key;
      }
   });
   return leastCountNum;
}
var num = 8;
var array = [1, 3, 3, 5, 5, 4, 4, 4];
console.log("The least Frequent Value is: "+ leastFrequent (array, num) );

时间复杂度为O(N),其中N是数组的大小。

空间复杂度为O(N),其中N是数组的大小。

结论

在本教程中,我们学习了使用三种方法找到数组的最少频繁值,即暴力解法的时间复杂度为O(N*N)和常数空间复杂度,使用排序函数的时间复杂度为O(N*log(N)),以及使用哈希映射函数的时间复杂度为O(N)和空间复杂度为O(N)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程