产生相同总和的最大对数
给定一个数组arr[] ,任务是计算总和相同的对的最大数量。
例子:
Input: arr[] = {1, 2, 3, 4}
Output: 2
(1, 2) = 3
(1, 3) = 4
(1, 4), (2 + 3) = 5
(2, 4) = 6
(3, 4) = 7
Input: arr[] = {1, 8, 3, 11, 4, 9, 2, 7}
Output: 3
方法:
- 创建一个映射来存储每对总和的频率。
- 遍历地图并找到最大频率。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the maximum
// count of pairs with equal sum
int maxCountSameSUM(int arr[], int n)
{
// Create a map to store frequency
unordered_map M;
// Store counts of sum of all pairs
// in the map
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
M[(arr[i] + arr[j])]++;
int max_count = 0;
// Find maximum count
for (auto ele : M)
if (max_count < ele.second)
max_count = ele.second;
return max_count;
}
// Driver code
int main()
{
int arr[] = { 1, 8, 3, 11, 4, 9, 2, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << maxCountSameSUM(arr, n);
return 0;
}
Java
// Java implementation of the approach
class GFG
{
// return the max
static int Max(int arr[])
{
int max = arr[0];
for(int i = 1; i < arr.length; i++)
if(arr[i] > max)max = arr[i];
return max;
}
// Function to return the maximum
// count of pairs with equal sum
static int maxCountSameSUM(int arr[], int n)
{
int maxi = Max(arr);
// Create a map to store frequency
int[] M = new int[2 * maxi + 1];
for(int i = 0; i < M.length; i++)M[i] = 0;
// Store counts of sum of all
// pairs in the map
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
M[(arr[i] + arr[j])] += 1;
int max_count = 0;
// Find maximum count
for (int i = 0; i < 2 * maxi; i++)
if (max_count < M[i])
max_count = M[i];
return max_count;
}
// Driver code
public static void main(String args[])
{
int arr[] = { 1, 8, 3, 11, 4, 9, 2, 7 };
int n = arr.length;
System.out.print(maxCountSameSUM(arr, n));
}
}
// This code is contributed by Arnab Kundu
Python3
# Python3 implementation of the approach
from collections import defaultdict
# Function to return the maximum
# count of pairs with equal sum
def maxCountSameSUM(arr, n):
# Create a map to store frequency
M = defaultdict(lambda:0)
# Store counts of sum of
# all pairs in the map
for i in range(0, n - 1):
for j in range(i + 1, n):
M[arr[i] + arr[j]] += 1
max_count = 0
# Find maximum count
for ele in M:
if max_count < M[ele]:
max_count = M[ele]
return max_count
# Driver code
if __name__ == "__main__":
arr = [1, 8, 3, 11, 4, 9, 2, 7]
n = len(arr)
print(maxCountSameSUM(arr, n))
# This code is contributed
# by Rituraj Jain
C#
// C# implementation of the approach
using System.Linq;
using System;
class GFG
{
// Function to return the maximum
// count of pairs with equal sum
static int maxCountSameSUM(int []arr, int n)
{
int maxi = arr.Max();
// Create a map to store frequency
int[] M = new int[2 * maxi + 1];
// Store counts of sum of all
// pairs in the map
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
M[(arr[i] + arr[j])] += 1;
int max_count = 0;
// Find maximum count
for (int i = 0; i < 2 * maxi; i++)
if (max_count < M[i])
max_count = M[i];
return max_count;
}
// Driver code
static void Main()
{
int []arr = { 1, 8, 3, 11, 4, 9, 2, 7 };
int n = arr.Length;
Console.WriteLine(maxCountSameSUM(arr, n));
}
}
// This code is contributed by mits
PHP
Javascript
输出:
3