Código de produção · unidade 27 de 27
Big O básico
Escala é uma relação, não um cronômetro.
01 / 07Use as setas do teclado ou deslize
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
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.
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.
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
10Entrada / chamada
sumWithSingleLoop([])Retorno esperado
004 / Teste
Prove que funciona
O teste chama sua função e compara o resultado real com o esperado.
Como utilizar este teste
- 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
- 02Salve sua implementação em
exercises.js, na mesma pasta do teste. - 03Abra o terminal nessa pasta e execute o comando abaixo.
- 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="sumWithSingleLoop" exercises.test.jsComportamentos 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
function sumWithSingleLoop(arr) {
let total = 0;
for (const value of arr) total += value;
return total;
}