Dado un conjunto ordenado de enteros, quiero encontrar el número de pares que suman . Por ejemplo, dado , el número de pares suma a cero es .
Sea el número de elementos en la matriz de entrada. Si uso la búsqueda binaria para encontrar el inverso aditivo para un elemento en la matriz, el orden es . Si recorro todos los elementos del conjunto, entonces el orden es .
¿Cómo encontrar un algoritmo de orden ?
algorithms
Laura
fuente
fuente
Respuestas:
Deje ser la matriz de entrada ordenada. Mantener dos punteros y que ir a través de los elementos en . El puntero pasará por la "parte izquierda" de , que son los enteros negativos. El puntero hace lo mismo para la "parte correcta", los enteros positivos. A continuación, describiré una solución de pseudocódigo y supondré que por simplicidad menor. Omitido son también los controles para los casos en que no sólo son positivas o negativas sólo enteros en .A l r A l A r 0∉A A
Es obvio que el algoritmo toma tiempo .O(N)
fuente
El enfoque más simple, según tengo entendido, parece ser utilizar una tabla hash, H = {a [0] = verdadero, .., a [n-1] = verdadero}. Esta tabla hash se puede construir en tiempo O (n). Una vez que se construye la tabla hash, repita a través de A [0, .., n-1] y verifique si H [-1 * a [i]] existe. Si lo hace, incremente un contador en 1 y devuelva el resultado final. Esto es claramente O (n).
fuente
Tenga en cuenta que podemos buscar un valor en un conjunto de Python en tiempo constante.
fuente