Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

193
Visualizações
Cómo obtener la mejor combinación de números de la matriz de números más cercanos al número x

Necesito obtener la mejor combinación de números de los numbers de matriz que están más cerca del número max . (se permiten numbers de suma de números de matriz)

 var numbers = [2, 5, 3, 7, 9, 20, 54, 89, 10]; // some numbers in array var max = 10; // the highest possible number we want to get from array var highest = [];

En este caso, la salida debe ser (3, 7) o (2, 5, 3) o (10), la salida no debe ser 9

He hecho esto, pero esto no es lo que quiero.

 var possibles = numbers.filter(number => number <= max); highest.push(Math.max(...possibles)); possibles.sort((a,b) => b - a); possibles.forEach(number =>{ if( (max - highest[0]) <= number){ highest.push(Math.max(...possibles)); } });

La salida en este caso es 9, que no es el número más alto posible.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Podría adoptar un enfoque recursivo utilizando algunos métodos para minimizar los datos y la iteración.

En primer lugar, se necesita una variable para mantener una suma mínima real de todos los valores de una matriz temporal a la right .

Otra función comprueba si ya existe una matriz con el mismo valor en la matriz de resultados.

Al final, iter realiza algunas comprobaciones para salir o agregar right al result y finalmente bifurca la llamada a sí mismo utilizando el valor real o no.

El conjunto de resultados contiene todos los resultados posibles con la suma máxima posible.

 function getMax(values, max) { const includes = (arrays, array) => arrays.some(a => a.join() === array.join()), iter = ([value, ...left], right = [], sum = 0) => { ++count; if (sum > max) return; if (sum > min) { result = [right]; min = sum; } else if (sum === min && !includes(result, right)) { result.push(right); } if (sum === max || value === undefined) return; iter(left, [...right, value], sum + value); iter(left, [...right], sum); }; let min = 0, count = 0, result = []; iter(values.filter(v => v <= max).sort((a, b) => b - a)); console.log('iterations', count); return result; } getMax([2, 5, 3, 7, 9, 20, 54, 89, 10], 10).map(a => console.log(...a));
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda