0Pricing
Competitive Programming Academy · Aula

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 = window

Deslize 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 / k

Trate 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 None

Quando 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

  1. Somas em Janelas de Tamanho Fixo
  2. Janela Variável com Dois Ponteiros
  3. Maior Substring sem Repetições
  4. Conte Janelas que Satisfazem uma Regra
← Voltar para Competitive Programming Academy