Esta es una variante de 3SUM. Hay muchas formas de resolverlo, y no puede hacerlo mejor que el tiempo de ejecución O (N ^ 2). Una solución:
1. Ordene los enteros en el lugar (clasificación rápida, clasificación de radios MSD, etc.).
2. Iterar a través de los enteros de izquierda a derecha (de i = 0 a i = n-3).
3. Deje que x sea su número entero actual a [i]. Ahora ha reducido el problema a encontrar todos los pares de enteros (y y z) de i + 1 a n-1 de modo que x + a [y] + a [z] sumen 0 para cada i.
a.sort () # Técnicamente desearía hacer una ordenación in situ. para i en xrange (0, n - 2): x = a [i] y = i + 1 z = n - 1 mientras y <z: triplet_sum = x + a [y] + a [z] si triplet_sum == 0: # Encontramos un triple rendimiento (x, a [y], a [z]) y + = 1 z - = 1 elif triplet_sum <0: y + = 1 más: z - = 1
El tiempo de ejecución es O (N ^ 2), que es óptimo, y el espacio depende de lo que elija (p. Ej., Clasificación rápida y clasificación de radios MSD use O (espacio de registro (N)) y qué hace con el triple (p. Ej., Impresión o el rendimiento sería O (1) mientras que agregar los tripletes a una colección usaría el espacio O (N)).
- ¿Qué sitio web / tutorial / video puedo usar para comprender muy bien la programación dinámica en un día?
- ¿Cuáles son algunos libros similares a Programming Pearls?
- ¿Puede una máquina Turing aceptar una cadena de longitud 2014? ¿Por qué este problema es indecidible?
- ¿Cómo inserta este código un nuevo nodo en un árbol binario?
- ¿Cómo la elección incorrecta de las estructuras de datos hace que un programa sea ineficiente?