Somas em Janelas de Tamanho Fixo
Deslize uma janela de comprimento k em O(n).
Somas em Janelas de Tamanho Fixo é uma aula grátis de Competitive Programming Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Competitive Programming Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Competitive Programming Academy inclui 4 aulas no total.
O problema da soma repetida
Muitas tarefas pedem a soma de cada bloco de k elementos consecutivos. Recalcular cada bloco do zero é desperdício, e você pode fazer melhor. 🪟
Primeiro, o jeito lento
A ideia ingênua soma cada janela de comprimento k separadamente. Isso repete trabalho e custa O(n vezes k), o que é lento demais para entradas grandes.
for i in range(n - k + 1):
s = sum(a[i:i + k])A ideia principal
Janelas vizinhas se sobrepõem quase completamente. Ao avançar uma posição para a direita, você apenas remove o elemento mais à esquerda e adiciona um novo elemento à direita.
Inicialize a primeira janela
Comece somando uma vez os primeiros k elementos. Essa única soma será a base que você continuará atualizando à medida que a janela avançar.
window = sum(a[:k])
best = windowDeslize uma posição
Para mover a janela, adicione o elemento que entra e subtraia aquele que sai. Assim, cada etapa realiza uma quantidade constante de trabalho, O(1).
for i in range(k, n):
window += a[i] - a[i - k]Acompanhe sua resposta
Após cada deslocamento, atualize o que for necessário, como a máxima soma de janela encontrada até o momento. O valor da janela estará sempre disponível instantaneamente.
best = max(best, window)O custo total é linear
Você acessa cada elemento para adicioná-lo e mais uma vez para removê-lo, portanto a varredura completa é O(n). Isso atende facilmente a restrições grandes.
Cuidado com os índices
O elemento que sai da janela é a[i - k], não a[i - 1]. Acertar esse deslocamento é o erro mais comum em janelas fixas.
As médias vêm de graça
Precisa da maior média de janela em vez da soma? Basta dividir por k a soma de janela acompanhada. A lógica deslizante não muda em nada.
avg = window / kTrate vetores pequenos
Se o vetor for menor que k, nenhuma janela completa existirá. Compare len(a) com k logo no início e retorne para evitar um erro de índice.
if n < k:
return NoneQuando as janelas fixas se aplicam
Use este padrão sempre que o comprimento da janela for fixo e você puder combinar valores com baixo custo, como em somas, contagens ou estatísticas simples acumuladas.
Verificação rápida
Você desliza uma janela de tamanho k uma posição para a direita ao longo de um vetor.
Recapitulação
Inicialize a primeira janela uma vez, depois adicione e subtraia a cada etapa para deslizá-la em O(1). A varredura completa de tamanho fixo é executada em tempo linear. ✅
Perguntas Frequentes
A aula “Somas em Janelas de Tamanho Fixo” é grátis?
Sim — o texto completo de “Somas em Janelas de Tamanho Fixo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Competitive Programming Academy, atualize para CoddyKit PRO. O curso de Competitive Programming Academy inclui 4 aulas no total.
O que vou aprender em “Somas em Janelas de Tamanho Fixo”?
Deslize uma janela de comprimento k em O(n). Você pratica Competitive Programming Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Competitive Programming Academy?
Nenhuma experiência prévia é necessária. Competitive Programming Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Somas em Janelas de Tamanho Fixo”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Competitive Programming Academy?
Sim. Cada aula de Competitive Programming Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Somas em Janelas de Tamanho Fixo
- Janela Variável com Dois Ponteiros
- Maior Substring sem Repetições
- Conte Janelas que Satisfazem uma Regra