JavaScript 陣列元素頻率計數程式


計數頻率意味著我們需要統計給定陣列中每個元素出現的次數。我們可以使用一些內建的資料結構,例如對映(maps),來獲取頻率,或者也可以對陣列進行排序來獲取陣列元素的頻率。我們將討論這兩種方法,讓我們逐一瞭解它們。

陣列排序

在這種方法中,我們將對陣列進行排序,並檢查當前元素是否與前一個元素相同。如果當前元素與前一個元素不同,則這是一個新元素,前一個元素的頻率為計數變數的值,我們將使用此變數來增加元素的計數。

方法

  • 首先,我們將使用內建的 sort 方法對陣列進行排序。

  • 我們將建立一個數組,用於儲存陣列中元素及其相應的頻率。

  • 我們將建立一個變數“count”來儲存當前元素出現的次數。

  • 我們將遍歷陣列,並在每次迭代中,檢查當前元素是否等於前一個元素。

  • 如果當前元素等於前一個元素,則我們將增加 count 的值。

  • 如果當前元素不等於前一個元素,則我們將 count 與前一個元素作為鍵值對儲存在陣列中,表示當前元素的頻率。

  • 此外,我們將 count 的值更新為 1。

  • 遍歷完陣列後,我們將儲存排序陣列最後一個元素的頻率,因為它不會被儲存,並且迴圈已結束。

示例

讓我們看看實現上述方法的程式碼,並以更好的方式新增和理解它。

// given array 
var arr = [ 1, 4, 5, 6, 2, 2, 2, 4, 5, 5, 4, 6, 9, 1, 2, 2, 3]

// sorting the array 
arr.sort()

var count = 1 

for(var i = 1;i<arr.length; i++){
   if(arr[i] == arr[i-1]) {
      count++;
   }
   else {
      console.log("The frequency of "+ arr[i-1] + " is: " + count);
      count = 1;
   }
}

console.log("The frequency of "+ arr[arr.length-1] + " is: " + count);

時間和空間複雜度

上述程式碼的時間複雜度為 O(N*log(N)),因為我們對陣列進行了排序,排序的時間複雜度為 N*log(N),並且我們遍歷了陣列一次,時間複雜度為 O(N),其中 N 是給定陣列中存在的元素數量。

上述程式碼的空間複雜度為 O(1),因為我們沒有使用任何額外的空間,但是如果我們想要儲存頻率,則會有一些額外的空間,空間複雜度為 O(N)。

使用對映查詢所有元素的頻率

對映是將值以鍵值對形式儲存的資料結構,並且資料可以在以後更新。在對映中新增或更新資料需要對數時間,但無需對陣列進行排序,這意味著我們不必像在前面的程式中那樣更改陣列。讓我們首先了解一下方法,然後我們將進入編碼部分。

方法

  • 首先,我們將使用 new 關鍵字建立對映。

  • 我們將遍歷陣列,並對每個元素進行檢查。

  • 如果當前元素存在於對映中,則我們將增加為當前元素儲存的值(即頻率)。

  • 如果元素未儲存,則我們將它作為鍵新增到對映中,並將其值設定為 1。

  • 遍歷完陣列後,我們可以將對映中儲存的值作為鍵值對打印出來。

示例

我們已經瞭解了程式碼的方法,現在讓我們進入實現部分,以便更好地理解程式碼。

// given array 
var arr = [ 1, 4, 5, 6, 2, 2, 2, 4, 5, 5, 4, 6, 9, 1, 2, 2, 3]
var map = new Map()
for(var i = 0;i<arr.length; i++){
   if(map.has(arr[i])){
      var k = map.get(arr[i]);
      map.delete(arr[i]);
      map.set(arr[i],k+1)
   }
   else{
      map.set(arr[i],1);
   }
}
console.log(map)

時間和空間複雜度

上述程式碼的時間複雜度為 O(N*log(N)),其中 N 是陣列的大小,對數因子是由於對映的工作原理造成的。上述程式碼的空間複雜度為 O(N),這是儲存對映中元素所需的。

使用對映查詢頻率很好,因為我們不必更改給定的陣列。

結論

在本教程中,我們學習了 JavaScript 陣列元素頻率計數程式。計數頻率意味著我們需要統計給定陣列中每個元素出現的次數。我們已經瞭解了兩種解決此問題的方法:一種是使用內建的 sort 函式對元素進行排序,另一種是使用內建的 map 資料結構。

更新於: 2023年3月24日

811 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.