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 實現,並使用示例輸入對其進行了測試。使用這種方法,我們可以輕鬆地在陣列中找到和最大的對的數量,使其成為各種程式設計場景中一種有用的技術。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP