📌  相关文章
📜  计算给定数组中存在总和的不同对的数量

📅  最后修改于: 2022-05-13 01:57:49.776000             🧑  作者: Mango

计算给定数组中存在总和的不同对的数量

给定一个包含 N 个正整数的数组。计算给定数组中存在总和的对数。而重复的对将不再计算在内。而且我们不能使用相同的位置元素进行配对。例如: (2, 1) 和 (1, 2) 将被视为仅一对。
请仔细阅读所有示例。

例子:

Input : arr[] = {1, 2, 3, 5, 10}
Output : 2
Explanation : Here there are two such pairs:
(1 + 2) = 3, (2 + 3) = 5.
Note : Here we can't take pair (5, 5) as 
we can see 5 is not coming twice

Input : arr[] = {1, 5, 6, 4, -1, 5} 
Output : 4
Explanation : (1 + 5) = 6, (1 + 4) = 5, 
(5 + -1) = 4, (6 + -1) = 5
Note : Here (1, 5) comes twice will be 
considered as only one pair. 

Input : arr[] = {5, 5, 5, 5, 10} 
Output : 1
Explanation : (5 + 5) = 10
Note : Here (5, 5) comes twice will be
considered as only one pair. 

这个想法是映射对以找到独特的元素。我们首先将元素及其计数存储在地图中。然后我们遍历数组元素,对于每一对元素 (arr[i], arr[j]),我们检查 (arr[i] + arr[j]) 是否存在于数组中。如果存在,那么我们检查它是否已经使用对映射进行计数。如果还没有计数,那么我们增加计数。

C++
// C++ implementation to find count of unique pairs
// whose sum exists in given array
#include 
using namespace std;
  
// Returns number of pairs in arr[0..n-1] with
// sum equal to 'sum'
int getPairsCount(int arr[], int n)
{
    // Store counts of all elements in map m
    // to find pair (arr[i], sum-arr[i])
    // because (arr[i]) + (sum - arr[i]) = sum
    map m;
    for (int i = 0; i < n; i++)
        m[arr[i]]++;
  
    // To remove duplicate items we use result map
    map, int> pairs;
  
    int count = 0; // Initialize result
  
    // Consider all pairs
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
  
            // If sum of current pair exists
            if (m[arr[i] + arr[j]] > 0 && 
                pairs[{ arr[i], arr[j] }] == 0) {
                count++;
            }
  
            // Insert current pair both ways to avoid
            // duplicates.
            pairs[{ arr[i], arr[j] }]++;
            pairs[{ arr[j], arr[i] }]++;
        }
    }
    return count;
}
  
// Driver function to test the above function
int main()
{
    int arr[] = { 1, 5, 6, 4, -1, 5, 10 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    cout << getPairsCount(arr, n);
    return 0;
}


Python3
# Python3 implementation to find count 
# of unique pairs whose sum exists in
# given array
  
# Returns number of pairs in arr[0..n-1] 
# with sum equal to 'sum'
def getPairsCount(arr, n):
  
    # Store counts of all elements in map m
    # to find pair (arr[i], sum-arr[i])
    # because (arr[i]) + (sum - arr[i]) = sum
    m = dict()
    for i in range(n):
        m[arr[i]] = m.get(arr[i], 0) + 1
  
    # To remove duplicate items 
    # we use result map
    pairs1 = dict()
  
    count = 0 # Initialize result
  
    for i in range(n):
        for j in range(i + 1, n):
            l = arr[i] + arr[j]
            tp = (arr[i], arr[j])
  
            if l in m.keys():
  
                if tp not in pairs1.keys():
  
                    count += 1
            pairs1[(arr[i], arr[j])] = 1
            pairs1[(arr[j], arr[i])] = 1
  
    return count
  
# Driver Code
arr = [1, 5, 6, 4, -1, 5, 10]
n = len(arr)
  
print(getPairsCount(arr, n))
  
# This code is contributed by Mohit Kumar


输出:

6