Tengo una serie de enteros positivos como entrada en javascript. La salida debe ser el mayor entero posible creado a partir de elementos de matriz combinados en la entrada. Ejemplos:

  1. entrada: [80,35,2,9,45,8] salida: 988045352
  2. entrada: [509,7,49,21,527,2,742] salida: 774252750949221

Creo que conozco la lógica que podría usarse, pero no logra hacerlo ...

Supongo que dos elementos de la matriz uno al lado del otro deben concatenarse en ambas direcciones y comparar estos valores, cuál es el más grande y luego usar esta lógica para ordenar todos los elementos de la matriz. Sin embargo, no puedo hacerlo en JavaScript.

Gracias.

2
Dragan Milosevic 16 feb. 2017 a las 00:09

3 respuestas

La mejor respuesta

Puede verificar si la cadena es más pequeña que el valor cambiado.

function sort(a, b) {
    return ('' + b + a) - ('' + a + b);
}

console.log(+[509, 7, 49, 21, 527, 2, 742].sort(sort).join(''));
console.log(+[80, 35, 2, 9, 45, 8].sort(sort).join(''));
1
Nina Scholz 16 feb. 2017 a las 07:45

Después de convertir enteros a cadenas, compare sus uniones:

function Comparator(a, b) {
  var s1 = a.toString();
  var s2 = b.toString();
  return (s2+s1).localeCompare(s1+s2);
}

var myArray = [509, 7, 49, 21, 527, 2, 742].sort(Comparator);
console.log(myArray.join(''));
0
MaxZoom 15 feb. 2017 a las 21:46

Haga esto:

a = [80,35,2,9,45,8];

result = a.sort((x,y)=> ""+x+y < ""+y+x);

Resultado:

[ 9, 8, 80, 45, 35, 2 ]

Y para el segundo el resultado es:

[ 7, 742, 527, 509, 49, 2, 21 ]

Si desea un solo número, use .join("") después de la ordenación.

6
R. Schifini 15 feb. 2017 a las 21:24