Dado un arreglo arr[] , la tarea es encontrar el conteo de pares en el arreglo tal que LCM(arr[i], arr[j]) > min(arr[i], arr[j])
Nota: Pares ( arr[i], arr[j]) y (arr[j], arr[i]) se consideran idénticos y se contarán una sola vez.
Ejemplos:
Entrada: arr[] = {1, 1, 4, 9}
Salida: 5
Todos los pares válidos son (1, 4), (1, 9), (1, 4), (1, 9) y (4, 9) ).Entrada: arr[] = {2, 4, 5, 2, 5, 7, 2, 8}
Salida: 24
Planteamiento: Se observa que solo los pares de la forma (arr[i], arr[j]) donde arr[i] = arr[j] no cumplirán la condición dada. Entonces, el problema ahora se reduce a encontrar el número de pares (arr[i], arr[j]) tales que arr[i] != arr[j] .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> 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<int, int> 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<Integer, Integer> 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<Integer, Integer> 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<int,int> mp = new Dictionary<int,int>(); 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<int, int> 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
<script> // Javascript implementation of the approach // Function to return the count of valid pairs function count_pairs(n, a) { // Store frequencies of array elements var frequency = new Map(); for (var i = 0; i < n; i++) { if(frequency.has(a[i])) frequency.set(a[i], frequency.get(a[i])+1) else frequency.set(a[i], 1) } var count = 0; // Count of pairs (arr[i], arr[j]) // where arr[i] = arr[j] frequency.forEach((value, key) => { var f = 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 var arr = [2, 4, 5, 2, 5, 7, 2, 8]; var n = arr.length; document.write( count_pairs(n, arr)); </script>
24
Complejidad de tiempo: O(n), donde n representa el tamaño de la array dada.
Espacio auxiliar: O(n), donde n representa el tamaño de la array dada.