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

340
Views
Encuentre el entero impar (fundamentos js) - lógica

La tarea Dada una serie de números enteros, encuentra el que aparece un número impar de veces.

Siempre habrá un solo número entero que aparecerá un número impar de veces.

Los ejemplos [0,1,0,1,0] deberían devolver 0, porque ocurre 3 veces (lo cual es impar). [1,2,2,3,3,3,4,3,3,3,2,2,1] debería devolver 4, porque aparece 1 vez (lo cual es impar).

Vi esta solución, pero me cuesta entender la lógica de por qué funciona:

p.ej

 function findOdd(arr) { return arr.find((item) => arr.filter(el => el == item).length % 2) } console.log(findOdd([20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5])) // returns 5

Si el número debe ser impar, ¿por qué no lo es? ... .length % 2 !== 0 ; ¡Realmente agradecería cualquier ayuda! Gracias :)

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

arr.filter(el => el == item).length % 2 devuelve 0 o 1. Esto es lo suficientemente bueno, ya que ese valor será forzado a booleano, y dado que 0 es falso y 1 verdadero, tiene el efecto deseado.

Tenga en cuenta que este algoritmo tiene una complejidad O(n²). Es posible hacer esto de manera más eficiente.

 function findOdd(arr) { return arr.reduce((a, b) => a ^ b); } console.log(findOdd([20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5])) // returns 5

Esto usa XOR. Todos los valores en la matriz son XOR juntos. Se basa en la consideración de que a ^ a == 0 para cualquier valor de a . Y a ^ 0 == a . Entonces, si tenemos un número impar de a , obtendremos a , de lo contrario 0. Como solo hay un número cuya ocurrencia es impar, lo encontraremos de esta manera. El caso especial de 0 también funcionará.

about 4 years ago · Juan Pablo Isaza Report

0

Porque el filtro devuelve una matriz que contiene elementos que satisfacen la condición. Devuelve elementos filtrados, no los "filtra".

about 4 years ago · Juan Pablo Isaza Report

0

Esta es una solución rápida y eficiente.

  1. arr.find((item)=>{} esto recorrerá cada elemento de la matriz y devolverá el primer valor satisfecho donde devolvemos verdadero;

  2. arr.filter(el => el == item) esto volverá a recorrer la misma matriz y devolverá una matriz de elementos duplicados ejemplo if arr = [1,1,2,1,3] luego arr.filter(el => el == 1) devolverá [1,1,1] ;

  3. arr.filter(el => el == item).length % 2 esto devolverá el recordatorio de la matriz de resultados de elementos duplicados divididos por 2, que debería ser 0 o 1

  4. Para javascript 0 == false y 1 == true ; entonces, cuando el bucle de búsqueda encuentre un 1 del filtro, devolverá el valor;

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!