Menu
CoddyTech

Next Permutation

Recibes un arreglo de enteros nums, y los valores pueden repetirse. Imagina todos los arreglos distintos de estos valores, ordenados en orden lexicográfico: compara dos arreglos en el primer índice donde difieren, y el que tenga el valor menor en esa posición va primero. Devuelve el arreglo que viene justo después de nums en ese orden.

Si nums ya es el arreglo más grande, no hay ninguno después: devuelve el más pequeño, que es el de los valores ordenados en orden creciente. Intenta lograr un tiempo O(n) y usar O(1) de memoria adicional.

Función

nextPermutation(nums: integer-array) → integer-array
numsinteger-array
la disposición actual de los valores
Devuelveinteger-array
la siguiente disposición en orden lexicográfico, o los valores ordenados en orden creciente si nums es el mayor

Restricciones

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 1000

Ejemplos

Entrada
nums = [2, 5, 4, 1]
Salida
[4, 1, 2, 5]
Explicación
La cola 5, 4, 1 está disminuyendo, así que el 2 que la precede debe crecer. El menor valor de la cola mayor que 2 es 4; colócalo ahí y pon el resto en orden creciente: [4, 1, 2, 5].
challenge icon

Para ir más allá

¿Cómo encontrarías, en cambio, la disposición anterior, la que va justo antes de nums en el orden lexicográfico?

Restablecer código
def nextPermutation(nums):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumento

nums = [2, 5, 4, 1]

Salida Esperada

[4, 1, 2, 5]