在 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告