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)。

更新於:2023年3月30日

549 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.