Dados dos arreglos de enteros arr[] y brr[] que consisten en elementos distintos de tamaño N y M respectivamente y un entero K , la tarea es encontrar el conteo de pares (arr[i], brr[j]) tal que (brr [j] – arr[i]) > K .
Ejemplos:
Entrada: arr[] = {5, 9, 1, 8}, brr[] {10, 12, 7, 4, 2, 3}, K = 3
Salida: 6
Explicación:
Los posibles pares que satisfacen las condiciones dadas son: { (5, 10), (5, 12), (1, 10), (1, 12), (1, 7), (8, 12) }.
Por lo tanto, la salida requerida es 6.Entrada: arr[] = {2, 10}, brr[] = {5, 7}, K = 2
Salida: 2
Explicación:
Los posibles pares que satisfacen las condiciones dadas son: { (2, 5), (2, 7 ) }.
Por lo tanto, la salida requerida es 2.
Enfoque ingenuo: el enfoque más simple para resolver este problema es atravesar la array y generar todos los pares posibles de la array dada y, para cada par, verificar si (brr[j] – arr[i]) > K o no. Si se encuentra que es cierto, entonces incremente el contador. Finalmente, imprima el valor del contador.
Complejidad temporal: O(N × M)
Espacio auxiliar: O(1)
Enfoque eficiente: para optimizar el enfoque anterior, la idea es ordenar primero la array y luego usar dos técnicas de puntero . Siga los pasos a continuación para resolver el problema:
- Inicialice una variable, digamos cntPairs para almacenar el recuento de pares que satisfacen las condiciones dadas.
- Ordenar la array dada .
- Inicialice dos variables, digamos i = 0 y j = 0 para almacenar el índice de los punteros izquierdo y derecho respectivamente.
- Atraviese la array y compruebe si (brr[j] – arr[i]) > K o no. Si se determina que es cierto, actualice el valor de cntPairs += (M – j) e incremente el valor de la variable de puntero i .
- De lo contrario, incremente el valor de la variable de puntero j .
- Finalmente, imprima el valor de cntPrint .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to count pairs that satisfy // the given conditions int count_pairs(int arr[], int brr[], int N, int M, int K) { // Stores index of // the left pointer. int i = 0; // Stores index of // the right pointer int j = 0; // Stores count of total pairs // that satisfy the conditions int cntPairs = 0; // Sort arr[] array sort(arr, arr + N); // Sort brr[] array sort(brr, brr + M); // Traverse both the array // and count then pairs while (i < N && j < M) { // If the value of // (brr[j] - arr[i]) exceeds K if (brr[j] - arr[i] > K) { // Update cntPairs cntPairs += (M - j); // Update i++; } else { // Update j j++; } } return cntPairs; } // Driver Code int main() { int arr[] = { 5, 9, 1, 8 }; int brr[] = { 10, 12, 7, 4, 2, 3 }; int K = 3; int N = sizeof(arr) / sizeof(arr[0]); int M = sizeof(brr) / sizeof(brr[0]); cout << count_pairs(arr, brr, N, M, K); return 0; }
Java
// Java program to implement // the above approach import java.util.*; class GFG{ // Function to count pairs that satisfy // the given conditions static int count_pairs(int arr[], int brr[], int N, int M, int K) { // Stores index of // the left pointer. int i = 0; // Stores index of // the right pointer int j = 0; // Stores count of total pairs // that satisfy the conditions int cntPairs = 0; // Sort arr[] array Arrays.sort(arr); // Sort brr[] array Arrays.sort(brr); // Traverse both the array // and count then pairs while (i < N && j < M) { // If the value of // (brr[j] - arr[i]) exceeds K if (brr[j] - arr[i] > K) { // Update cntPairs cntPairs += (M - j); // Update i++; } else { // Update j j++; } } return cntPairs; } // Driver Code public static void main(String args[]) { int arr[] = { 5, 9, 1, 8 }; int brr[] = { 10, 12, 7, 4, 2, 3 }; int K = 3; int N = arr.length; int M = brr.length; System.out.println(count_pairs(arr, brr, N, M, K)); } } // This code is contributed by SURENDRA_GANGWAR
Python3
# Python3 program to implement # the above approach # Function to count pairs that satisfy # the given conditions def count_pairs(arr, brr, N, M, K): # Stores index of # the left pointer. i = 0 # Stores index of # the right pointer j = 0 # Stores count of total pairs # that satisfy the conditions cntPairs = 0 # Sort arr[] array arr = sorted(arr) # Sort brr[] array brr = sorted(brr) # Traverse both the array # and count then pairs while (i < N and j < M): # If the value of # (brr[j] - arr[i]) exceeds K if (brr[j] - arr[i] > K): # Update cntPairs cntPairs += (M - j) # Update i += 1 else: # Update j j += 1 return cntPairs # Driver Code if __name__ == '__main__': arr = [ 5, 9, 1, 8 ] brr = [ 10, 12, 7, 4, 2, 3 ] K = 3 N = len(arr) M = len(brr) print(count_pairs(arr, brr, N, M, K)) # This code is contributed by mohit kumar 29
C#
// C# program to implement // the above approach using System; class GFG{ // Function to count pairs // that satisfy the given // conditions static int count_pairs(int[] arr, int[] brr, int N, int M, int K) { // Stores index of // the left pointer. int i = 0; // Stores index of // the right pointer int j = 0; // Stores count of total pairs // that satisfy the conditions int cntPairs = 0; // Sort arr[] array Array.Sort(arr); // Sort brr[] array Array.Sort(brr); // Traverse both the array // and count then pairs while (i < N && j < M) { // If the value of // (brr[j] - arr[i]) // exceeds K if (brr[j] - arr[i] > K) { // Update cntPairs cntPairs += (M - j); // Update i++; } else { // Update j j++; } } return cntPairs; } // Driver code static void Main() { int[] arr = {5, 9, 1, 8}; int[] brr = {10, 12, 7, 4, 2, 3}; int K = 3; int N = arr.Length; int M = brr.Length; Console.WriteLine( count_pairs(arr, brr, N, M, K)); } } // This code is contributed by divyeshrabadiya07
Javascript
<script> // Javascript program to implement // the above approach // Function to count pairs that satisfy // the given conditions function count_pairs(arr, brr, N, M, K) { // Stores index of // the left pointer. let i = 0; // Stores index of // the right pointer let j = 0; // Stores count of total pairs // that satisfy the conditions let cntPairs = 0; // Sort arr[] array (arr).sort(function(a,b){return a-b;}); // Sort brr[] array (brr).sort(function(a,b){return a-b;}); // Traverse both the array // and count then pairs while (i < N && j < M) { // If the value of // (brr[j] - arr[i]) exceeds K if (brr[j] - arr[i] > K) { // Update cntPairs cntPairs += (M - j); // Update i++; } else { // Update j j++; } } return cntPairs; } // Driver Code let arr = [5, 9, 1, 8]; let brr = [ 10, 12, 7, 4, 2, 3]; let K = 3; let N = arr.length; let M = brr.length; document.write(count_pairs(arr, brr, N, M, K)); // This code is contributed by unknown2108 </script>
6
Complejidad de tiempo: O(N * log(N) + M * log(M))
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por swapnoneelmajumdar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA