Comprimento do ciclo de ordenação
Dado um array de inteiros distintos e um valor selecionado, retorne o número de trocas no ciclo desse valor quando cada valor deslocado é movido para sua posição no array ordenado em ordem crescente. Retorne 0 se o valor selecionado já estiver posicionado corretamente.
Qual é o comprimento do ciclo de ordenação de 9?
[1, 9, 8, 4, 7, 2, 6, 3, 5]
[1, 5, 8, 4, 7, 2, 6, 3, 9] // 9 swaps with 5; 9 is in its correct spot.
[1, 7, 8, 4, 5, 2, 6, 3, 9] // 5 replaces 7; 5 is in its correct spot.
[1, 6, 8, 4, 5, 2, 7, 3, 9] // 7 replaces 6; 7 is in its correct spot.
[1, 2, 8, 4, 5, 6, 7, 3, 9] // 6 replaces 2; 6 is in its correct spot and 2 is in it's correct spot - done!O ciclo de 9 tem comprimento 4. Observe como todos os números incluídos na troca (9, 5, 7, 6 e 2) estão em seus lugares corretos. Isso acontece porque todos esses números estão no mesmo ciclo de ordenação.
Aqui está outro exemplo. Usando o mesmo array acima, qual é o comprimento do ciclo de ordenação de 8?
[1, 9, 8, 4, 7, 2, 6, 3, 5]
[1, 9, 3, 4, 7, 2, 6, 8, 5] // 8 replaces 3; 8 and 3 are both in their correct spots.O ciclo de 8 tem comprimento 1.
Exemplos
cycleLength([1, 5, 4, 3, 2, 6], 4) ➞ 1
cycleLength([1, 6, 7, 2, 4, 3, 8, 9, 5], 7) ➞ 7
cycleLength([43, 81, 88, 93, 17, 32, 19, 11], 93) ➞ 5
cycleLength([1, 6, 7, 2, 4, 3, 8, 9, 5], 1) ➞ 0Notas
- Retorne
0se o elemento já estiver na ordem correta (veja o exemplo n.º 4). - Se esta questão parecer confusa, pense nela desta forma:
- Normalmente, trocar dois números para colocar o primeiro na ordem correta não coloca o segundo na ordem correta. Em outras palavras, é uma ordenação benéfica para apenas uma parte.
- O ciclo de ordenação termina quando uma troca resulta em uma ordenação benéfica para ambas as partes; por exemplo, trocar dois números coloca o primeiro E o segundo número em seus lugares corretos.
- Esta questão é complicada; veja os Comentários para obter uma dica se estiver com dificuldades.