A2A
Idealmente, debería pensar en una solución antes de hacer esta pregunta, suponiendo que lo hiciera, estoy escribiendo a continuación.
Claro, olvidé la mayor parte de lo que aprendí en algoritmos por ahora, pero dado que solo solicitó el algoritmo, que es la forma correcta, probaré el sin procesar sin ver el enlace, ya que parece ser nuevo para mí.
- ¿Cuáles son algunas de las preguntas técnicas en la entrevista de Facebook?
- ¿Qué tipo de preguntas se harán durante las entrevistas de TI para otros estudiantes de la rama?
- ¿Cuáles son las principales diferencias entre buscar un trabajo de software en los Estados Unidos después de completar un MS y buscar un trabajo en India después de completar un BE?
- ¿Cómo es la prueba escrita / preliminar para la colocación en el campus de EPIC Systems, EE. UU.?
- ¿Cuáles son buenas preguntas de entrevista para una pasantía?
A es una matriz. Digamos que N es el número de elementos.
x es un número que es la suma de unos 2 números en la matriz.
si deduzco x de A [N-1] (último ele), llámelo como diff, y luego encuentre si el diff está en A [0, N-2], entonces debería decir si ese par (A [N- 1], diff) existe.
Si no se encuentra, continúe con A [N-2] (último segundo elemento), hasta que la matriz tenga un solo elemento.
Como está buscando en toda la matriz (N) y si encuentra la diferencia con la búsqueda binaria (log N), estamos viendo N logN
Para volver a intentar una lógica un poco mejor,
Consideraría elegir A [N-1], A [N-2] de manera no secuencial, es decir, en lugar de, de último a primero, también podría realizar una búsqueda binaria allí, es decir, elegiría el elemento medio del conjunto, luego el centro del conjunto del lado izquierdo, o el conjunto del lado derecho. Aquí supongo que la diferencia ayudará cuando es -ve o + ve para ir a qué lado de la matriz del elemento medio.
Una vez que sea posible desde N * log N anterior, mejoraría para registrar N * log N, que debería ser más rápido.
Obviamente veo que puede haber una mejor solución usando más memoria aquí.
En general, cuando pienso en una solución que es menor que N log N, como log N * log N ahora, solo entonces codifico para ahorrar tiempo.
Esperar más rápido que uno rápido ayuda en una solución óptima para usted.