Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

407
Vistas
primera pregunta duplicada en CodeSignal en Javascript

No pude entender por qué pasé 22/23 en este desafío y no pude resolver el último caso de prueba ya que estaba oculto. Los comentarios de CodeSignal son

Pruebas superadas: 22/23. Límite de tiempo de ejecución excedido: el programa excedió el límite de tiempo de ejecución. Asegúrese de que complete la ejecución en unos segundos para cualquier entrada posible.

Desafío Dada una matriz a que contiene solo números en el rango de 1 a a.longitud, encuentra el primer número duplicado para el cual la segunda ocurrencia tiene el índice mínimo. En otras palabras, si hay más de 1 número duplicado, devuelve el número para el que la segunda aparición tiene un índice más pequeño que la segunda aparición del otro número. Si no hay tales elementos, devuelve -1.

Ejemplo

Para a = [2, 1, 3, 5, 3, 2], la salida debe ser solución (a) = 3.

Hay 2 duplicados: los números 2 y 3. La segunda aparición de 3 tiene un índice más pequeño que la segunda aparición de 2, por lo que la respuesta es 3.

Para a = [2, 2], la salida debe ser solución (a) = 2; Para a = [2, 4, 3, 5, 1], la salida debe ser solución (a) = -1.

De entrada y salida

[límite de tiempo de ejecución] 4 segundos (js)

[entrada] array.integer a

Restricciones garantizadas: 1 ≤ a.length ≤ 105, 1 ≤ a[i] ≤ a.length.

[salida] entero

El elemento en a que ocurre en la matriz más de una vez y tiene el índice mínimo para su segunda aparición. Si no hay tales elementos, devuelve -1.

Mi código

 function solution(a) { let first = Infinity for ( let i = 0; i<a.length; i++ ) { let pointer = i+1; while (pointer <a.length) { if (a[i] === a[pointer] && pointer<first) { first = pointer; } pointer +=1 } } if (first === Infinity) { return -1 } return a[first] }

Gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En casos malos, está iterando sobre toda la matriz para cada elemento en ella: O(n ^ 2) . El while(pointer < a.length) hace que el argumento tome demasiado tiempo.

En su lugar, cree un Conjunto de elementos encontrados hasta el momento y regrese cuando se encuentre el primer elemento duplicado (que será el segundo índice mínimo).

 const solution = (a) => { const set = new Set(); for (const item of arr) { if (set.has(item)) return item; set.add(item); } return -1; };

Dado que esto no tiene un bucle anidado ( .has y .add es O(1) ), esto es O(n) en general, lo que debería ser lo suficientemente rápido.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda