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循环用于计算每个元素的频率,并维护一个元素计数器,该计数器存储元素的频率,并在每次遇到新元素时更新,`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(N²) ,其中N是数组的大小。
空间复杂度为O(1)
现在看看它的优化解法。
方法2:使用排序函数
这里我们首先对数组进行排序,然后线性遍历数组并根据它检查元素的频率计数,从而更新`leastCountNum`。
示例
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)。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP