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

121
Vistas
Devuelve verdadero si cualquier elemento de la matriz es igual a n o la suma de dos elementos de la matriz es igual a n - mejora el rendimiento

Como en el título, quiero devolver verdadero si algún elemento de la matriz es igual a n o la suma de dos elementos de la matriz es igual a n. Entonces, si la matriz es [1,4,5] y n es 1 o 4 o 5 o 6 o 9, quiero que sea cierto. Aquí está mi código:

 function checkArray (x, array) { return array.includes(x) || array.some((item, i) => array.slice(i+1).includes(x-item)); }

Funciona bien, pero ¿usar "algo" es la mejor manera en términos de rendimiento? ¿Cómo puedo mejorar la velocidad de ejecución?

Editar: se permiten números negativos

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

0

No hay nada de malo con some más que la sobrecarga de rendimiento normal de asignar/recolectar basura un objeto de función y activar una llamada de función para todos y cada uno de los elementos de la matriz.

Casi siempre es más rápido usar un bucle for tradicional, pero generalmente es una microoptimización que solo debe usarse como último recurso: la refactorización del código JS idiomático de alto nivel impulsado por la devolución de llamadas a un bucle for solo ofrece un factor constante. acelerar.

Antes de recurrir a eso, recomendaría reducir la complejidad del tiempo: Array#includes es O(n), al igual que Array#slice . Hacer estas operaciones en un bucle anidado es O(n^2).

Puede probar la compensación clásica de "espacio frente a tiempo" y usar un conjunto para almacenar cada elemento que haya visto hasta ahora. Si n - currentElement === something in the set , ha localizado dos números que suman n .

 const oneOrTwoElementsEqualN = (arr, n) => { const seen = new Set(); return arr.some(e => { if (e === n || seen.has(n - e)) { return true; } seen.add(e); }); }; console.log(oneOrTwoElementsEqualN([1,2,3], 5)); console.log(oneOrTwoElementsEqualN([1,2,3], 2)); console.log(oneOrTwoElementsEqualN([1,2,3], 6));

Tenga en cuenta que esta es una ligera variante del problema de "dos sumas" .

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