Comprimento do ciclo de ordenação
Dada uma lista 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 na lista ordenada 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 a mesma lista 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
cycle_length([1, 5, 4, 3, 2, 6], 4) ➞ 1
cycle_length([1, 6, 7, 2, 4, 3, 8, 9, 5], 7) ➞ 7
cycle_length([43, 81, 88, 93, 17, 32, 19, 11], 93) ➞ 5
cycle_length([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.