Menu
CoddyTech

Next Permutation

Você recebe um array de inteiros nums, e os valores podem se repetir. Imagine todos os arranjos distintos desses valores, ordenados em ordem lexicográfica: compare dois arranjos no primeiro índice em que diferem, e aquele que tiver o menor valor nessa posição vem primeiro. Retorne o arranjo que vem logo depois de nums nessa ordem.

Se nums já for o maior arranjo, não há nenhum depois dele: retorne o menor, que corresponde aos valores ordenados em ordem crescente. Busque um tempo O(n) e memória extra O(1).

Função

nextPermutation(nums: integer-array) → integer-array
numsinteger-array
a disposição atual dos valores
Retornainteger-array
o próximo arranjo em ordem lexicográfica ou os valores classificados em ordem crescente se nums for o maior

Restrições

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

Exemplos

Entrada
nums = [2, 5, 4, 1]
Saída
[4, 1, 2, 5]
Explicação
A cauda 5, 4, 1 está diminuindo, então o 2 à sua frente precisa aumentar. O menor valor da cauda acima de 2 é 4; coloque-o ali e deixe o restante em ordem crescente: [4, 1, 2, 5].
challenge icon

Para ir além

Como você encontraria, em vez disso, o arranjo anterior, aquele que vem imediatamente antes de nums em ordem lexicográfica?

Redefinir código
def nextPermutation(nums):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumento

nums = [2, 5, 4, 1]

Saída Esperada

[4, 1, 2, 5]