Estoy tratando de resolver el siguiente problema. Creo que mi solución está funcionando bien. Pero, el sistema en el que estoy tratando de cargar las soluciones, no acepta mi solución. Probablemente algunas pruebas están fallando. ¿Puedo saber lo que me estoy perdiendo?
El problema es:
Como última pregunta de una entrevista exitosa, su jefe le da unas cuantas hojas de papel con números y le pide que componga el número más grande a partir de estos números. El número resultante será su salario, por lo que está muy interesado en maximizar este número. ¿Cómo puedes hacer esto?
Muestra 1
Entrada :
2
21 2
Salida : 221
Muestra 2
Entrada :
3
23 39 92
Salida : 923923
Mi solución es:
function MaxSallary(nums) { let maxSize = Math.max(...nums).toString().length; let newArr = []; nums.map((num) => { while (num.toString().length < maxSize) { num = num.toString().concat(num.toString().split("").slice(-1)[0]); } newArr.push(Number(num)); }); finalArr = []; while (newArr.length > 0) { let minIndex = newArr.indexOf(Math.max(...newArr)); newArr.splice(minIndex, 1); finalArr.push(...nums.splice(minIndex, 1)); } return finalArr.join(""); } console.log(MaxSallary([2, 12, 34, 11, 43, 21, 5]));Desea saber en qué orden se deben concatenar los números, de modo que, una vez analizados de nuevo a un número, el resultado sea el más alto posible. Reformulado de esta manera, parece que primero deberíamos ordenar la matriz.
Al comparar dos números a y b , para saber cuál debe ir primero, necesitamos saber cuál es mayor entre ${a}${b} y ${b}${a} :
.sort((a, b) => parseInt(`${b}${a}`, 10) - parseInt(`${a}${b}`, 10))) .sort muta la matriz (y la devuelve), así que la clono primero.
function MaxSallary(nums) { const salary = [...nums] .sort((a, b) => parseInt(`${b}${a}`, 10) - parseInt(`${a}${b}`, 10)) .join(""); return salary; } console.log(MaxSallary([21, 2])); console.log(MaxSallary([23, 39, 92])); console.log(MaxSallary([2, 12, 34, 11, 43, 21, 5]));