Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

409
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!