JavaScript 矩陣沿對角線映象程式


求陣列中和最大的對數是一個常見的編碼問題,它涉及到找到陣列中和最大的所有對的數量。這個問題可以使用多種方法解決,包括暴力法、排序和雜湊表。在本教程中,我們將討論一種使用雜湊表解決此問題的簡單有效的方法。我們將逐步解釋解決方案背後的邏輯,並提供 JavaScript 的詳細實現。此外,我們將分析解決方案的時間和空間複雜度,並討論可能的最佳化。本教程假設您具備 JavaScript 程式設計和資料結構的基本知識。那麼,讓我們開始吧!

問題陳述

給定一個整數陣列,找到陣列中和最大的整數對的數量。

讓我們用一些例子來理解這個問題陳述。

示例

示例 1 −

Input: [1, 2, 3, 4, 5]
Output: 1

解釋 − 在給定的輸入陣列中,一對數字的最大和為 9(4 + 5)。只有一對數字的和為最大值,即(4,5)。因此,輸出為 1。

示例 2 −

Input: [1, 1, 1, 2, 2, 2]
Output: 3

解釋  在給定的輸入陣列中,有三對數字的和為最大值 3,即(1,2),(1,2)和(1,2)。因此,輸出為 3。

現在,正如我們上面提到的,這個問題可以使用多種方法解決。所以讓我們看看每種方法並選擇最佳方法。

1. 暴力法

在暴力法中,我們可以考慮陣列中所有可能的整數對,並找到最大和。然後,我們可以計算具有相同最大和的對的數量。這種方法的時間複雜度為 O(n^2),其中 n 是陣列中元素的數量。

2. 排序法

在排序法中,我們可以按降序對陣列進行排序,然後透過取前兩個元素的和來找到最大和。然後,我們可以計算具有相同最大和的對的數量。這種方法的時間複雜度為 O(nlogn),其中 n 是陣列中元素的數量。

3. 雜湊表法

在雜湊表法中,我們可以使用雜湊表來跟蹤陣列中每個元素的頻率。然後,我們可以找到陣列中的最大元素,並計算具有相同最大和的對的數量。這種方法的時間複雜度為 O(n),其中 n 是陣列中元素的數量。

在這些方法中,雜湊表法是最有效的,因為它具有線性時間複雜度。在本教程中,我們將詳細討論雜湊表法,並提供 JavaScript 實現。我們將逐步解釋解決方案背後的邏輯,並分析解決方案的時間和空間複雜度。

所以讓我們瞭解雜湊表演算法中解決此問題所涉及的步驟。

演算法

  • 步驟 1 − 建立一個雜湊表來儲存陣列中每個元素的頻率。

  • 步驟 2 − 找到陣列中的最大元素。

  • 步驟 3 − 在雜湊表中找到最大元素的頻率。

  • 步驟 4 − 如果最大元素的頻率大於 1,則和最大的對的數量等於最大元素的頻率乘以(最大元素的頻率 - 1)再除以 2。這是因為從 n 個元素中選擇兩個元素的方式數量等於 n choose 2,它等於 n*(n-1)/2。

  • 步驟 5 − 如果最大元素的頻率等於 1,則我們需要找到陣列中的第二大元素。為此,我們可以按降序遍歷雜湊表,並找到頻率非零的第二大元素。

  • 步驟 6 − 使用最大元素的頻率和第二大元素的頻率計算和最大的對的數量。此公式為最大元素的頻率乘以第二大元素的頻率。

使用這種方法,我們可以線上性時間 O(n) 內找到和最大的對的數量,其中 n 是陣列中元素的數量。

在下一節中,我們將提供此方法的詳細 JavaScript 實現,並附帶示例。讓我們開始吧!

示例:使用 JavaScript 實現雜湊表法

輸入 1:[1, 2, 3, 4, 5]

預期輸出:和最大的對的數量:1

輸入 2:[1, 1, 1, 2, 2, 2]

預期輸出:和最大的對的數量:3

function findNumberOfPairsWithMaxSum(arr) {
   let freq = {};
   let max = -Infinity;
   let secondMax = -Infinity;
   // Count the frequency of each element in the array
   for (let i = 0; i < arr.length; i++) {
      freq[arr[i]] = freq[arr[i]] ? freq[arr[i]] + 1 : 1;
      if (arr[i] > max) {
         secondMax = max;
         max = arr[i];
      } else if (arr[i] > secondMax && arr[i] < max) {
         secondMax = arr[i];
      }
   }
   // Find the number of pairs with the maximum sum
   if (freq[max] > 1) {
      let count = freq[max] * (freq[max] - 1) / 2;
      console.log("Number of pairs with maximum sum:", count);
   } else {
      let count = freq[max] * freq[secondMax];
      console.log("Number of pairs with maximum sum:", count);
   }
}
// Test the function with sample inputs
findNumberOfPairsWithMaxSum([1, 2, 3, 4, 5]); 
findNumberOfPairsWithMaxSum([1, 1, 1, 2, 2, 2]);

結論

因此,在本教程中,我們討論瞭如何使用雜湊表和一種簡單有效的方法來解決“和最大的對的數量”問題。這種方法的時間複雜度為 O(n),其中 n 是陣列中元素的數量。我們提供了此方法的詳細 JavaScript 實現,並使用示例輸入對其進行了測試。使用這種方法,我們可以輕鬆地在陣列中找到和最大的對的數量,使其成為各種程式設計場景中一種有用的技術。

更新於: 2023年5月2日

267 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告