Dada una serie de elementos distintos. La tarea es encontrar tripletas en la array cuya suma sea cero.
Ejemplos:
Input : arr[] = {0, -1, 2, -3, 1} Output : (0 -1 1), (2 -3 1) Explanation : The triplets with zero sum are 0 + -1 + 1 = 0 and 2 + -3 + 1 = 0 Input : arr[] = {1, -2, 1, 0, 5} Output : 1 -2 1 Explanation : The triplets with zero sum is 1 + -2 + 1 = 0
Método 1: Este es un método simple que toma O(n 3 ) tiempo para llegar al resultado.
- Enfoque: el enfoque ingenuo ejecuta tres bucles y verifica uno por uno que la suma de los tres elementos es cero o no. Si la suma de tres elementos es cero, imprima los elementos; de lo contrario, imprima no encontrado.
- Algoritmo:
- Ejecute tres bucles anidados con el contador de bucles i , j , k
- Los primeros bucles se ejecutarán de 0 a n-3 y el segundo bucle de i+1 a n-2 y el tercer bucle de j+1 a n-1. El contador de bucle representa los tres elementos del triplete.
- Compruebe si la suma de los elementos en i’th, j’th, k’th es igual a cero o no. En caso afirmativo, imprima la suma; de lo contrario, continúe.
A continuación se muestra la implementación del enfoque anterior:
C++
// A simple C++ program to find three elements// whose sum is equal to zero#includeusing namespace std;// Prints all triplets in arr[] with 0 sumvoid findTriplets(int arr[], int n){bool found = false;for (int i=0; iOutput0 -1 1 2 -3 1
C++
// arreglo dado cuya suma es cero
#include
utilizando el espacio de nombres estándar;
// función para imprimir trillizos con 0 sum
void findTriplets(int arr[], int n)
{
bool found = false;
para (int i=0; i
para (int j=i+1; j
-1 0 1 -3 2 1
Análisis de Complejidad:
- Complejidad Temporal: O(n 2 ).
Dado que se requieren dos bucles anidados, la complejidad del tiempo es O(n 2 ). - Espacio Auxiliar: O(n).
Dado que se requiere un hashmap, la complejidad del espacio es lineal.
Método 3: Este método usa Ordenar para llegar al resultado correcto y se resuelve en tiempo O(n 2 ).
Enfoque: El método anterior requiere espacio adicional. La idea se basa en el método 2 de esta publicación. Para cada elemento verifica que haya un par cuya suma sea igual al valor negativo de ese elemento.
Algoritmo:
- Ordene la array en orden ascendente.
- Atraviesa la array de principio a fin.
- Para cada índice i , cree dos variables l = i + 1 y r = n – 1
- Ejecute un bucle hasta que l sea menor que r si la suma de array[i], array[l] y array[r] es igual a cero, luego imprima el triplete y rompa el bucle
- Si la suma es menor que cero, aumente el valor de l, al aumentar el valor de l, la suma aumentará a medida que se ordene la array, por lo que array [l + 1]> array [l]
- Si la suma es mayor que cero, disminuya el valor de r, al aumentar el valor de l, la suma disminuirá a medida que se ordene la array, por lo que array[r-1] < array [r] .
A continuación se muestra la implementación del enfoque anterior:
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA