8 min

Ciclo Único em Array

Verifica se é possível visitar todos os elementos exatamente uma vez e retornar ao início.

MédiaO(n) / O(1)ArrayMóduloCiclo

Visualizador Interativo

Array[ 2, 3, 1, -4, -4, 2 ]Passo 1 / 7
i=0
+2direita
i=1
+3direita
i=2
+1direita
i=3
-4esquerda
i=4
-4esquerda
i=5
+2direita
Salto:arr[0] = +2(0 + 2) mod 6 = 2
Velocidade:1200ms
Historico de Passos
#0i=0 → salto +2 → i=2(0+2) mod 6 = 2

Como Funciona

Imagine um array onde cada elemento diz quantas posições pular. Valores positivos vão para a direita, negativos para a esquerda. O array é circular — se passar do final, volta ao início. A pergunta: começando no índice 0, consigo visitar todos os elementos exatamente uma vez e voltar ao índice 0? Parece complicado, mas a solução é direta. Siga os saltos, conte quantos elementos visitou, e verifique se terminou onde começou após n saltos.

O truque é perceber que não precisa marcar posições visitadas. Se der n saltos e voltar ao 0, visitou todos.

Passo a Passo

  1. Começa no índice 0
  2. Salta o número de posições indicado pelo elemento atual
  3. Usa módulo para manter o índice dentro do array
  4. Conta cada posição visitada
  5. Repete até dar n saltos
  6. Verifica se terminou no índice 0
  7. Retorna true se visitou todos exatamente uma vez

Analise de Complexidade

⏱️Tempo
O(n)

Faz exatamente n saltos, cada um em O(1).

Ver prova

n iterações × O(1) por iteração = O(n).

💾Espaco
O(1)

Só usa variáveis auxiliares. Sem estruturas extras.

🎯Melhor Caso
O(n)

Sempre precisa verificar todos os elementos.

⚠️Pior Caso
O(n)

A complexidade não muda com o input.

Comparacao com Outros Algoritmos

AlgoritmoTempoEspacoMelhor Para
Ciclo Único(atual)O(n)O(1)Verificar ciclo hamiltoniano em array circular
Floyd Cycle DetectionO(n)O(1)Detectar ciclo em linked list
DFS para CiclosO(V+E)O(V)Detectar ciclo em grafos

Dicas e Erros Comuns

  • Esquecer de tratar módulo negativo (em linguagens que retornam resto negativo)
  • Não verificar se terminou no índice 0
  • Usar set para marcar visitados quando não precisa
  • Confundir detecção de ciclo com verificação de ciclo único

Perguntas de Entrevista

Pratique respondendo a perguntas comuns de entrevistas tecnicas. Clique em uma pergunta para iniciar uma sessao de pratica com IA.

Implementacao

python
1def has_single_cycle(array):Definição
2 current_idx = 0Inicialização
3 num_visited = 0
4
5 while num_visited < len(array):Loop Principal
6 if num_visited > 0 and current_idx == 0:Verificação de Direção
7 return False
8
9 num_visited += 1Incremento
10 current_idx = (current_idx + array[current_idx]) % len(array)Próximo Índice
11
12 return current_idx == 0Retorno
13