给定一个数组arr[] ,任务是找到数组中对的数量,使得LCM(arr[i], arr[j]) > min(arr[i], arr[j])
注意:对(arr[i], arr[j])和(arr[j], arr[i])被认为是相同的,并且只会被计算一次。
例子:
Input: arr[] = {1, 1, 4, 9}
Output: 5
All valid pairs are (1, 4), (1, 9), (1, 4), (1, 9) and (4, 9).
Input: arr[] = {2, 4, 5, 2, 5, 7, 2, 8}
Output: 24
方法:据观察,只有形式为(arr[i], arr[j])其中arr[i] = arr[j] 的对不满足给定条件。因此,问题现在简化为找到满足arr[i] != arr[j]的对(arr[i], arr[j]) 的数量。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the count of valid pairs
int count_pairs(int n, int a[])
{
// Store frequencies of array elements
unordered_map frequency;
for (int i = 0; i < n; i++) {
frequency[a[i]]++;
}
int count = 0;
// Count of pairs (arr[i], arr[j])
// where arr[i] = arr[j]
for (auto x : frequency) {
int f = x.second;
count += f * (f - 1) / 2;
}
// Count of pairs (arr[i], arr[j]) where
// arr[i] != arr[j], i.e. Total pairs - pairs
// where arr[i] = arr[j]
return ((n * (n - 1)) / 2) - count;
}
// Driver Code
int main()
{
int arr[] = { 2, 4, 5, 2, 5, 7, 2, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << count_pairs(n, arr);
return 0;
}
Java
// Java implementation of the approach
import java.util.HashMap;
import java.util.Map;
class GfG
{
// Function to return the count of valid pairs
static int count_pairs(int n, int a[])
{
// Store frequencies of array elements
HashMap frequency = new HashMap<>();
for (int i = 0; i < n; i++)
{
if (!frequency.containsKey(a[i]))
frequency.put(a[i], 0);
frequency.put(a[i], frequency.get(a[i])+1);
}
int count = 0;
// Count of pairs (arr[i], arr[j])
// where arr[i] = arr[j]
for (Map.Entry x: frequency.entrySet())
{
int f = x.getValue();
count += f * (f - 1) / 2;
}
// Count of pairs (arr[i], arr[j]) where
// arr[i] != arr[j], i.e. Total pairs - pairs
// where arr[i] = arr[j]
return ((n * (n - 1)) / 2) - count;
}
// Driver code
public static void main(String []args)
{
int arr[] = { 2, 4, 5, 2, 5, 7, 2, 8 };
int n = arr.length;
System.out.println(count_pairs(n, arr));
}
}
// This code is contributed by Rituraj Jain
Python3
# Python3 implementation of the approach
# Function to return the count
# of valid pairs
def count_pairs(n, a) :
# Store frequencies of array elements
frequency = dict.fromkeys(a, 0)
for i in range(n) :
frequency[a[i]] += 1
count = 0
# Count of pairs (arr[i], arr[j])
# where arr[i] = arr[j]
for f in frequency.values() :
count += f * (f - 1) // 2
# Count of pairs (arr[i], arr[j]) where
# arr[i] != arr[j], i.e. Total pairs - pairs
# where arr[i] = arr[j]
return ((n * (n - 1)) // 2) - count
# Driver Code
if __name__ == "__main__" :
arr = [ 2, 4, 5, 2,
5, 7, 2, 8 ]
n = len(arr)
print(count_pairs(n, arr))
# This code is contributed by Ryuga
C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GfG
{
// Function to return the count of valid pairs
static int count_pairs(int n, int []arr)
{
// Store frequencies of array elements
Dictionary mp = new Dictionary();
for (int i = 0 ; i < n; i++)
{
if(mp.ContainsKey(arr[i]))
{
var val = mp[arr[i]];
mp.Remove(arr[i]);
mp.Add(arr[i], val + 1);
}
else
{
mp.Add(arr[i], 1);
}
}
int count = 0;
// Count of pairs (arr[i], arr[j])
// where arr[i] = arr[j]
foreach(KeyValuePair x in mp)
{
int f = x.Value;
count += f * (f - 1) / 2;
}
// Count of pairs (arr[i], arr[j]) where
// arr[i] != arr[j], i.e. Total pairs - pairs
// where arr[i] = arr[j]
return ((n * (n - 1)) / 2) - count;
}
// Driver code
public static void Main(String []args)
{
int []arr = { 2, 4, 5, 2, 5, 7, 2, 8 };
int n = arr.Length;
Console.WriteLine(count_pairs(n, arr));
}
}
// This code is contributed by Rajput-Ji
Javascript
输出:
24
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。