Antes de considerar cualquier cosa, debe hacer algunas preguntas más. Algunos puedo pensar en la parte superior de mi cabeza:
- ¿Es que estás buscando un elemento AN? Es decir, ¿tiene algún valor y necesita verificar si ocurre más de una vez en la matriz? De su pregunta no está claro si esto es lo que se pregunta o si necesita encontrar CUALQUIER elemento que ocurra más de una vez. Si este es el caso, es solo una búsqueda lineal: solo se detiene una vez que ha encontrado el valor dos veces (O (N) tiempo y O (1) espacio).
- ¿La matriz está ordenada o sus valores están organizados en algún orden? En este caso, solo necesitaría pasar de principio a fin, verificando si los elementos consecutivos son iguales, es decir, O (N) tiempo y O (1) espacio.
- Viendo que la matriz solo contiene valores entre 1 y N … ¿hay algún límite para N? Esto es muy probable ya que una matriz tiende a imponer algunos límites en su longitud, especialmente si su indexación está utilizando algún valor entero fijo. Todo lo que significa es un campo de bits lo suficientemente largo como para contener todos los valores posibles de la longitud de una matriz, es decir, un campo de bits de longitud constante (un tamaño O (1)) y una búsqueda de tiempo O (N) en el peor de los casos. Por ejemplo, el peor de los casos generales: si el índice en la matriz es un 32 con signo int, usted “sabe” que no puede haber un N mayor que 2,147,483,648 … lo que significa que necesita un campo de bits de 268,435,456 bytes de longitud (256MB), independientemente de lo que sea N. Si hay un límite menor para los tamaños de matriz, entonces esta longitud del campo de bits también se reduce.
Arriba hay algunas preguntas que hacer antes de considerar cualquier cosa, ya que sus respuestas permitirían mejorar considerablemente las velocidades posibles.
De lo contrario (si las tres respuestas son negativas) se convierte en:
- ¿Qué tipo de preguntas debo esperar en una entrevista de Yelp New Grad Software Engineer?
- ¿Qué tipo de preguntas se hacen en las pruebas escritas de las compañías de software / TI en India?
- ¿Cuáles son algunas preguntas frecuentes de la entrevista en cs / it branch? (Con respuestas)
- ¿Cuáles son los conceptos más importantes y frecuentes de C que uno debe saber antes de ir a una entrevista de empresa de TI?
- ¿Cuál es la mejor estrategia para prepararse para una entrevista de ingeniería de software de Google en solo una semana?
- El peor de los casos fuerza bruta O (N ^ 2) tiempo + O (1) espacio (que la pregunta parece tratar de evitar)
- O algo así como un recuento temporal de hash map / radix (es decir, O (N) tiempo y O (N) espacio); nuevamente, la complejidad del espacio limitante de la pregunta para no permitir esto.
- O algo así como la idea de encontrar el ciclo según la respuesta de Christopher. Que estrictamente va a ser un tiempo O (M + S ^ 2), donde S es la distancia entre los duplicados y M la posición del primero, aunque no se ve exactamente afectado por N.
Si esto fue algo así como una pregunta de entrevista y usted acaba de responder con algo como la idea de búsqueda de ciclo, solo le daría el 50% por su respuesta.
Para las entrevistas, en realidad es un intento de averiguar cómo piensas en lugar de saber la respuesta, es decir, me gustaría saber si puedes ver problemas en la pregunta planteada y quieres claridad para que puedas convertirla en la mejor solución posible .
La razón por la que solo daría el 50% para una respuesta “correcta” sin más preguntas es que significa que tiendes a asumir cosas, lo que generalmente es una muy mala señal para un programador. Al menos sabes “cómo”, por lo que no es 0%.