Código de produção · unidade 27 de 27

Big O básico

Escala é uma relação, não um cronômetro.

9 min de leitura · 7 cards · 16 exercícios

Card 1 de 7: Big O básico01 / 07

Leitura

O(1), O(log n), O(n) e O(n²) aplicados a buscas, loops e índices em memória.

No backend, esse fundamento aparece quando o código transforma entrada em decisão. O detalhe de linguagem deixa de ser acadêmico no momento em que altera um payload, uma regra de negócio ou a forma como uma falha chega à camada seguinte.

A forma mais útil de estudar é ligar a sintaxe a um contrato observável: o que entra, o que pode mudar, qual resultado sai e qual erro deve continuar o fluxo. É esse raciocínio que os exemplos e exercícios desta unidade procuram treinar.

Código

exemplo.js
const idSet = new Set(ids)

return users.filter(user =>
  idSet.has(user.id)
)

O que fica

  • Big O descreve como o custo cresce com a entrada.
  • Buscas repetidas podem transformar um fluxo linear em quadrático.
  • Set e Map trocam espaço por consultas mais rápidas.

Prática guiada.Leia, rode, quebre e explique cada exercício.

Prática guiada / unidade 27

Um problema de cada vez.

Leia o contrato, escreva sua tentativa e confira os casos esperados. A resolução de referência permanece visível ao final de cada exercício.

Fundamentalexercício 01 / 16

sumWithSingleLoop(arr)

01 / Entenda

Enunciado

soma todos os elementos de arr com um único laço. Exemplo de trabalho proporcional a n: O(n).

02 / Implemente

Sua tentativa

Comece pela assinatura e resolva sem olhar a resposta.

ponto de partida
function sumWithSingleLoop(arr) {
  // Escreva sua solução aqui.
}

03 / Preveja

Entrada e saída

Use estes exemplos para entender o contrato antes de programar.

Entrada / chamada

sumWithSingleLoop([1, 2, 3, 4])

Retorno esperado

10

Entrada / chamada

sumWithSingleLoop([])

Retorno esperado

0

04 / Teste

Prove que funciona

O teste chama sua função e compara o resultado real com o esperado.

Como utilizar este teste

  1. 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
  2. 02Salve sua implementação em exercises.js, na mesma pasta do teste.
  3. 03Abra o terminal nessa pasta e execute o comando abaixo.
  4. 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="sumWithSingleLoop" exercises.test.js

Comportamentos cobertos

  • soma todos os elementos com um laço O(n)
Ver código completo do teste
test("sumWithSingleLoop: soma todos os elementos com um laço O(n)", () => {
  assert.equal(sumWithSingleLoop([1, 2, 3, 4]), 10);
  assert.equal(sumWithSingleLoop([]), 0);
});

Ainda travou?

Dicas graduais

Nível 1 — direção, sem código

Para sumWithSingleLoop/countAllPairsNested: quantas vezes o corpo de cada laço roda, em função de arr.length? Um laço só, uma vez cada elemento; dois laços aninhados, uma vez para cada par.

Nível 2 — pista mais direta

sumWithSingleLoop: for (const value of arr) { total += value; }

05 / Compare

Resolução

Esta área permanece livre em todos os exercícios. O código atual da unidade aparece abaixo para comparação com os testes e casos esperados.
código disponível
function sumWithSingleLoop(arr) {
  let total = 0;
  for (const value of arr) total += value;
  return total;
}