Category Archives: Aprendizado

May Contain Lies

### Livro May Contain Lies

**Título Original:** *May Contain Lies: How Stories, Statistics, and Studies Exploit Our Biases—And What We Can Do About It*
**Autor:** Alex Edmans
**Tradução do Título:** “Pode Conter Mentiras: Como Histórias, Estatísticas e Estudos Exploram Nossos Vieses—E O Que Podemos Fazer Sobre Isso”

#### **Ideia Central do Livro:**
Vivemos na “Era da Informação”, mas também na “Era da *Des*informação”. Nos deparamos constantemente com alegações—seja em manchetes, posts de redes sociais, podcasts ou best-sellers—que se apresentam como fatos baseados em dados, histórias convincentes ou pesquisas científicas. No entanto, muitas dessas alegações são enganosas, distorcidas ou completamente falsas.

O livro não é sobre “notícias falsas” óbvias, mas sobre como informações que **”podem conter mentiras”** (daí o título) passam por verdades porque se alinham perfeitamente com os vieses cognitivos do nosso cérebro. Edmans argumenta que o problema não é apenas a desinformação intencional, mas a nossa própria predisposição a acreditar no que confirma nossas crenças pré-existentes.

#### **Por que Caímos Nisso? Os 4 Tipos de Viés:**

Edmans estrutura o livro em torno de quatro tipos principais de vieses que nos levam a interpretar mal a informação:

1. **Viés de Confirmação (Confirmation Bias):** Tendemos a buscar, aceitar e lembrar de informações que confirmam o que já acreditamos e a ignorar ou descartar evidências contrárias.
* **Exemplo:** Um defensor de uma determinada dieta vai compartilhar apenas estudos que mostram seus benefícios e desconsiderar estudos que mostram riscos.

2. **Viés de Autoridade (Authority Bias:** Damos peso excessivo à opinião de especialistas, gurus ou pessoas famosas, mesmo que eles não sejam especialistas no assunto em questão ou que suas alegações não sejam respaldadas por dados sólidos.
* **Exemplo:** Um CEO de sucesso dando palestras sobre liderança, mesmo que suas práticas sejam questionáveis ou não replicáveis.

3. **Viés de Causação (Causation Bias):** Confundimos correlação com causalidade. Assumimos que porque duas coisas acontecem juntas, uma必然mente causa a outra, o que nem sempre é verdade.
* **Exemplo:** “Países que consomem mais chocolate per capita têm mais ganhadores do Prêmio Nobel. Portanto, chocolate torna você mais inteligente.” (Ignorando fatores como riqueza e investimento em educação).

4. **Viés de Contexto (Context Bias):** Aceitamos uma estatística ou história sem questionar o contexto completo em que ela foi gerada. Dados podem ser cherry-picked (selecionados a dedo) ou tirados de um ambiente específico que não se aplica à situação geral.
* **Exemplo:** Citar o sucesso de uma empresa em um setor de nicho como uma receita universal para o sucesso empresarial.

#### **A Estrutura para Avaliar Alegações: Os 4 Níveis de Verdade**

Para combater esses vieses, Edmans propõe uma estrutura prática para avaliar qualquer alegação. Devemos classificar a informação em um de quatro níveis:

* **Nível 1: A alegação é precisa?** A informação foi relatada corretamente? Os dados foram fabricados ou distorcidos?
* **Nível 2: A alegação é precisa, mas generalizada?** Os dados são verdadeiros em um contexto específico, mas são aplicados de forma muito ampla? (Ex.: um estudo com ratos usado para fazer alegações sobre humanos).
* **Nível 3: A alegação é precisa e generalizável, mas imputa causalidade?** A alegação assume uma relação de causa e efeito onde pode haver apenas uma correlação.
* **Nível 4: A alegação é precisa, generalizável e causal?** Este é o padrão-ouro, mas muito raro. São alegações verdadeiras, aplicáveis e que comprovam causa e efeito.

A maioria das alegações problemáticas para no Nível 2 ou 3.

#### **O Que Podemos Fazer? (The Solution)**

O livro não se limita a diagnosticar o problema; ele oferece um “antídoto”. A solução proposta por Edmans é dupla:

1. **Pensamento Crítico Ativo (“Critical Thinking”):** Adotar uma mentalidade de ceticismo saudável. Sempre perguntar: “Qual é a evidência para isso?”, “Quem está financiando este estudo?”, “Qual é a amostra?”, “Isso mostra correlação ou causalidade?”.

2. **Diversidade Cognitiva (“Cognitive Diversity”):** Intencionalmente nos cercarmos de pessoas e fontes de informação que desafiam nossas visões de mundo. Debater com quem pensa diferente não para “vencer”, mas para testar a robustez de nossas próprias crenças e evitar a câmara de eco.

#### **Conclusão Traduzida:**
“May Contain Lies” é um guia essencial para a alfabetização de dados no século XXI. Ele ensina que a credibilidade de uma informação não depende apenas de *quem* a diz, mas de *como* ela é construída e apoiada por evidências.

A mensagem final é de **humildade intelectual**: reconhecer que nossos cérebros são vulneráveis a vieses e que a busca pela verdade requer um esforço consciente para questionar não apenas os outros, mas principalmente a nós mesmos.

**Em resumo, o livro é um manual para navegar um mundo cheio de informações enganosas, armando-nos com as ferramentas necessárias para separar fatos de ficção, dados de distorções e histórias verdadeiras de narrativas convenientes.**

Fluente sem curso

Como eu fiquei fluente em inglês sem fazer nenhum cursinho

Se você tivesse me conhecido aos 12 anos, teria rido da ideia de me ver falando inglês fluentemente. Eu mesma ria. Eu era aquela adolescente com medo de errar o “verb to be” na frente da sala. E adivinha? Nunca fiz cursinho. Zero. Nadinha.

Mas hoje, leio livros em inglês, assisto filmes sem legenda e trabalho com tecnologia usando a língua todos os dias. Como isso aconteceu?

A resposta é simples — mas não é fácil: eu fui autodidata. E fui constante.

Aprender inglês sozinho pode parecer uma missão impossível, mas na verdade é um processo bem parecido com aprender a tocar violão. Você não precisa de um conservatório pra tirar um som bonito — mas precisa de prática, rotina e os métodos certos.

E é aí que entra a ciência.

A tríade do aprendizado de línguas: input, output e repetição espaçada

Depois de muita tentativa e erro (e alguns tropeços feios), descobri que existem três pilares cientificamente comprovados para aprender qualquer idioma:

1. Input compreensível (Stephen Krashen vibes)

Você aprende mais quando entende 70-90% do que está ouvindo ou lendo. Isso ativa o seu cérebro sem sobrecarregá-lo.
O segredo aqui é consumir conteúdo no seu nível. Eu comecei com músicas e séries que eu amava, com legenda em inglês. Era como colocar o cérebro numa academia: no início, dói. Depois, cresce.

2. Output ativo (fala e escrita)

Você precisa falar. Sim, mesmo que erre. Falar ativa regiões do cérebro diferentes da leitura e da escuta. É como aprender a dirigir: não dá pra só ver vídeo no YouTube — tem que sentar no volante.
Eu gravava áudios pra mim mesma no celular, escrevia pequenos textos e participava de fóruns online. Errava horrores, mas melhorava a cada dia.

3. Repetição espaçada (Spaced Repetition)

O cérebro esquece — é da natureza dele. Mas ele também ama padrões. Eu usava apps como Anki pra revisar palavras e expressões com base na curva do esquecimento. Isso me salvou.
Revisar no tempo certo é como regar uma planta: se rega todo dia, ela afoga; se nunca rega, morre. Mas se rega no momento certo, floresce.

Aprender inglês é um hábito, não um evento

Aprender línguas é um jogo de longo prazo, onde quem vence não é o mais inteligente, mas o mais teimoso.

E sobre a vergonha de errar?

Aprender inglês é como ir pra academia usando roupas estranhas e levantando pesos tortos — no início, todo mundo parece estar olhando. Mas a real é que ninguém se importa.
E aos poucos, você vai ajustando os movimentos, entendendo o ritmo e percebendo que aquele “you is” do passado virou “you are” com naturalidade.

Você não precisa de cursinho. Precisa de direção.

Hoje, olhando pra trás, vejo que o que mais me ajudou foi a clareza de que fluência não é talento, é construção.
E se eu consegui, sendo só uma garota com um celular na mão e muita vontade de entender as letras da Taylor Swift… você também consegue.

Seja curioso, constante e compassivo com você mesmo. O resto é consequência.

Fonte: https://www.linkedin.com/posts/amanda-fernandes-software-engineer_como-eu-fiquei-fluente-em-ingl%C3%AAs-sem-fazer-activity-7319756738922999809-hMFd

Maximum Subarray

Introdução ao Subarray Máximo

O problema do Subarray Máximo nos pede para encontrar o subarray com a maior soma de um dado array. Este problema pode ser resolvido usando programação dinâmica e, mais especificamente, o Algoritmo de Kadane.

Problema de Submatriz Máxima

Dado um array de inteiros nums, encontre o subarray com a maior soma e retorne sua soma.

1 public class Solution {
2    public int maxSubArray(int[] nums) {
3        int maxSum = nums[0];
4        int currentSum = nums[0];
5
6        for (int i = 1; i < nums.length; i++) {
7            currentSum = Math.max(nums[i], currentSum + nums[i]);
8            maxSum = Math.max(maxSum, currentSum);
9        }
10
11        return maxSum;
12    }
13
14    public static void main(String[] args) {
15        Solution solution = new Solution();
16
17        int[] nums1 = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
18        int[] nums2 = {1};
19        int[] nums3 = {5, 4, -1, 7, 8};
20
21
22        System.out.println(solution.maxSubArray(nums1)); // Expected output: 6
23        System.out.println(solution.maxSubArray(nums2)); // Expected output: 1
24        System.out.println(solution.maxSubArray(nums3)); // Expected output: 23
25    }
26}

Fonte: https://interviewing.io/questions/maximum-subarray

Phrasal Verbs

Geral

💬 Mini Diálogo 1 — “Wake up”

Anna: What time do you usually wake up?
Tom: Around 6:30. I need some quiet time before work.
Anna: Wow, I wish I could wake up that early!

🎯 wake up = acordar


💬 Mini Diálogo 2 — “Give up”

Mark: This math problem is so hard. I’m about to give up.
Lucy: Don’t give up! Let’s figure it out together.
Mark: Okay, thanks! I needed that.

🎯 give up = desistir


💬 Mini Diálogo 3 — “Pick up”

Sarah: Can you pick up the kids from school today?
Mike: Sure, what time?
Sarah: Around 3 PM. Thank you!

🎯 pick up = buscar (alguém), pegar


💬 Mini Diálogo 4 — “Look for”

Emma: I’m looking for my keys. Have you seen them?
Jake: Check the kitchen. You left them there this morning.
Emma: Oh right, thanks!

🎯 look for = procurar


💬 Mini Diálogo 5 — “Turn off”

Dad: Turn off the lights when you leave the room.
Josh: Sorry! I always forget.
Dad: It helps save energy.

🎯 turn off = desligar

Trabalho

💬 Mini Diálogo 1 — “Call off”

(cancelar algo)

Manager: We need to call off the meeting.
Assistant: Okay, should I inform everyone?
Manager: Yes, please send an email now.

🎯 call off = cancelar


💬 Mini Diálogo 2 — “Follow up”

(acompanhar, dar continuidade)

Ana: Did you follow up with the client?
Leo: Not yet, I’ll send them a quick message now.
Ana: Great. We need their feedback ASAP.

🎯 follow up = fazer acompanhamento, retorno


💬 Mini Diálogo 3 — “Run by”

(checar algo com alguém)

Clara: Can I run something by you real quick?
Boss: Sure, what’s up?
Clara: It’s about the new budget proposal.

🎯 run by = confirmar algo com alguém, pedir opinião


💬 Mini Diálogo 4 — “Take on”

(assumir responsabilidade ou tarefa)

John: I can’t take on any more projects right now.
Karen: No worries. I’ll ask someone else.
John: Thanks, I’m swamped.

🎯 take on = assumir (tarefa, responsabilidade)


💬 Mini Diálogo 5 — “Catch up”

(atualizar-se ou colocar-se em dia)

Lucas: I need some time to catch up on emails.
Maria: Sure, we’ve all been busy.
Lucas: I’ll join you in 10 minutes.

🎯 catch up (on) = colocar-se em dia, recuperar o tempo

Entregas de projetos


💬 Mini Diálogo 1 — “Hand in”

(entregar algo oficialmente)

Carol: Have you handed in the final report yet?
Diego: Not yet. I’m doing the last review now.
Carol: Okay, but the deadline is at 5 PM sharp.

🎯 hand in = entregar (trabalho, relatório, etc.)


💬 Mini Diálogo 2 — “Wrap up”

(finalizar, concluir algo)

Jade: Let’s wrap up the presentation before lunch.
Felipe: Good idea. We just need to add the conclusion slide.
Jade: I’ll take care of that.

🎯 wrap up = finalizar


💬 Mini Diálogo 3 — “Fall behind”

(ficar para trás)

Lucas: We’re falling behind on this project.
Bea: I know. We need more people on the team.
Lucas: Or at least fewer last-minute changes.

🎯 fall behind = atrasar-se, ficar para trás no cronograma


💬 Mini Diálogo 4 — “Turn in”

(entregar, semelhante a “hand in” — usado mais nos EUA)

Nina: When are we supposed to turn in the prototype?
Josh: Friday morning, before the demo.
Nina: Okay, we’ll be ready.

🎯 turn in = entregar (projeto, trabalho, relatório)


💬 Mini Diálogo 5 — “Go over”

(revisar, analisar)

Manager: Let’s go over the timeline one more time.
Team: Sure, just to make sure we’re on track.
Manager: Exactly. No surprises next week.

🎯 go over = revisar, analisar em detalhes


 Liderança de Equipe


💬 Mini Diálogo 1 — “Step up”

(assumir responsabilidade, se destacar)

Sara: We’re short on team leads this week.
Andre: I can step up and take charge of the new task.
Sara: That would be amazing. Thank you!

🎯 step up = assumir a responsabilidade, dar um passo à frente


💬 Mini Diálogo 2 — “Bring up”

(levantar um assunto)

Leo: I’m not sure if I should bring up the issue with the client.
Maya: You should. Better now than during the launch.
Leo: True, I’ll mention it in the meeting.

🎯 bring up = mencionar, levantar um assunto


💬 Mini Diálogo 3 — “Back up”

(dar apoio a alguém)

Joana: I’ll support your decision in front of the board.
Carlos: Thanks. I really appreciate you backing me up.
Joana: That’s what teamwork is for.

🎯 back up = apoiar alguém


💬 Mini Diálogo 4 — “Check in”

(verificar como alguém está / acompanhar progresso)

Manager: Just checking in—how’s the new design going?
Rita: Pretty well! We’re ahead of schedule.
Manager: Great! Keep it up.

🎯 check in (with someone) = acompanhar, ver como a pessoa está indo


💬 Mini Diálogo 5 — “Lay out”

(explicar algo claramente, organizar ideias)

Victor: Can you lay out the plan for the onboarding process?
Emily: Sure, I’ll present the steps in today’s meeting.
Victor: Perfect, we need clarity.

🎯 lay out = explicar, apresentar de forma estruturada


Top 100 Phrasal Verbs

Phrasal Verb Significado em Português
ask out convidar para sair (romanticamente)
back up apoiar, dar suporte
blow up explodir, perder o controle
break down quebrar, parar de funcionar / desmoronar
break up terminar um relacionamento
bring up mencionar, levantar um assunto
call back retornar uma ligação
calm down acalmar-se
carry on continuar
check in fazer check-in
check out sair (do hotel) / dar uma olhada
clean up limpar
come across deparar-se com, encontrar por acaso
come back voltar
come in entrar
come on vamos lá / animar-se
come over visitar alguém
come up surgir (problema, assunto)
cut down (on) reduzir consumo de algo
cut off cortar, interromper
do over refazer
dress up vestir-se bem / fantasiar-se
drop off deixar alguém/algo em algum lugar
end up acabar sendo / acabar em
fall apart desmoronar (emocionalmente ou fisicamente)
fall down cair
figure out entender, encontrar uma solução
fill in preencher (formulário)
find out descobrir
get along (with) dar-se bem com alguém
get back voltar
get in entrar (carro, casa)
get off sair (ônibus, trabalho)
get on entrar (ônibus, avião) / dar-se bem
get out sair
get over superar (doença, término)
get up levantar-se
give away doar / revelar segredo
give back devolver
give up desistir
go ahead vá em frente
go back voltar
go on continuar, acontecer
go out sair (para se divertir)
grow up crescer
hand in entregar (trabalho, dever)
hang out passar tempo, sair
hang up desligar o telefone
hold on esperar / segurar firme
hurry up apressar-se
keep on continuar (fazendo algo)
keep up (with) acompanhar, manter o ritmo
let down decepcionar
log in entrar (sistema, site)
log out sair (sistema, site)
look after cuidar de
look around olhar em volta
look at olhar para
look for procurar
look forward to esperar ansiosamente
look out tomar cuidado
look up procurar (em dicionário, internet)
make up inventar / fazer as pazes / maquiar-se
move in mudar-se (para dentro)
move out mudar-se (para fora)
pass away falecer
pass out desmaiar / distribuir
pick up pegar / buscar / aprender
point out apontar, destacar
put away guardar
put off adiar
put on vestir / colocar
put out apagar (fogo, cigarro)
run out (of) ficar sem algo
run into encontrar por acaso
set up configurar / organizar
show off se exibir
shut down desligar, encerrar
sit down sentar-se
stand up levantar-se
stay up ficar acordado
take after parecer-se com (família)
take away levar embora
take back devolver / retirar o que disse
take off decolar / tirar (roupa)
take out levar para sair / tirar algo
take over assumir controle
tear up rasgar completamente
think over considerar, pensar bem
throw away jogar fora
throw up vomitar
try on experimentar roupa
turn down recusar / abaixar (volume)
turn off desligar / desanimar
turn on ligar / atrair
turn up aparecer / aumentar (volume)
wake up acordar
warm up aquecer / preparar-se
watch out prestar atenção, tomar cuidado
work out malhar / dar certo / resolver
write down anotar

Plano de Estudo HackerRank

Aqui vai um plano de estudo de 12 semanas, pensado para te preparar para as entrevistas de emprego usando os desafios do HackerRank. Esse cronograma é flexível e pode ser ajustado ao seu ritmo e às suas necessidades, mas ele abrange os tópicos e algoritmos que costumam ser mais solicitados em processos seletivos.


Semana 1: Preparação e Revisão da Lógica de Programação

  • Objetivo: Garantir que você esteja confortável com a linguagem de programação que irá utilizar (Python, Java, C++, etc.) e com os fundamentos da lógica.
  • Atividades:
    • Revisão dos Fundamentos: Variáveis, estruturas condicionais, loops e recursão.
    • Exercícios Básicos: Utilize problemas simples do HackerRank para se familiarizar com a plataforma e o ambiente de desenvolvimento.
  • Dicas Importantes:
    • Certifique-se de entender bem a notação Big-O para poder analisar a complexidade dos algoritmos.
    • Mantenha um caderno ou documento com anotações dos principais “patterns” que você for encontrando.

Semana 2: Arrays e Strings

  • Objetivo: Refletir sobre os padrões de manipulação de dados lineares.
  • Atividades:
    • Estudo Teórico: Revisão de operações básicas em arrays (busca, iteração, divisão e conquista) e manipulação de strings (análise de padrões, substrings, palíndromos).
    • Prática: Resolva exercícios focados em arrays e strings, como encontrar subarrays com soma máxima, reversão de strings, anagramas e problemas de sliding window.
  • Dicas Importantes:
    • Ao resolver cada exercício, tente identificar se há padrões que se repetem e como otimizar a solução.

Semana 3: Listas Ligadas e Estruturas Dinâmicas

  • Objetivo: Compreender estruturas dinâmicas e a manipulação de ponteiros ou referências.
  • Atividades:
    • Estudo Teórico: Conceitos de listas encadeadas (simples e duplamente ligadas).
    • Prática: Exercícios envolvendo inserção, remoção, reversão de listas e a detecção de ciclos.
  • Dicas Importantes:
    • Visualize as estruturas desenhando diagramas simples à mão; isso ajuda na fixação dos conceitos.

Semana 4: Pilhas, Filas e Deque

  • Objetivo: Dominar o uso dessas estruturas para resolver problemas que exigem controle de ordem.
  • Atividades:
    • Estudo Teórico: Funcionamento e casos de uso para pilhas, filas e deques.
    • Prática: Exercícios sobre validação de expressões (como parênteses balanceados), avaliação de expressões e problemas que fazem uso de algoritmos de visitação.
  • Dicas Importantes:
    • Refaça os exercícios de formas diferentes para ver como pequenas alterações podem impactar a performance.

Semana 5: Recursão e Técnicas de Backtracking

  • Objetivo: Desenvolver a habilidade de pensar e implementar soluções recursivas.
  • Atividades:
    • Estudo Teórico: Conceitos de recursão, pilha de execução e backtracking para resolução de problemas.
    • Prática: Resolva problemas envolvendo geração de permutações, combinação de dados e labirintos com backtracking.
  • Dicas Importantes:
    • Escreva “tracebacks” manuais para entender a ordem de execução da sua recursão.

Semana 6: Busca e Ordenação

  • Objetivo: Revisar algoritmos clássicos de ordenação e busca, fundamentais para otimização.
  • Atividades:
    • Estudo Teórico: Bubble Sort, Merge Sort, Quick Sort e Binary Search.
    • Prática: Resolva desafios que combinem ordenação com busca, como problemas que exijam divisão e conquista.
  • Dicas Importantes:
    • Sempre compare as diferentes abordagens para um mesmo problema e discuta sobre as vantagens e desvantagens de cada algoritmo.

Semana 7: Estruturas de Dados Avançadas – Árvores

  • Objetivo: Entender a estrutura, travessias e operações em árvores.
  • Atividades:
    • Estudo Teórico: Conceitos de árvores binárias e árvores de busca binária (BSTs); métodos de travessia (inorder, preorder, postorder).
    • Prática: Resolva problemas que envolvam a busca do menor ancestral comum (LCA), inserção e remoção em BSTs e a verificação de propriedades de árvores.
  • Dicas Importantes:
    • Pratique desenhando árvores e mapeando as chamadas recursivas para visualizar as travessias.

Semana 8: Grafos

  • Objetivo: Compreender as bases dos algoritmos de grafos, que aparecem com frequência em entrevistas.
  • Atividades:
    • Estudo Teórico: Conceitos de grafos direcionados e não direcionados; profundidade de busca (DFS) e largura de busca (BFS); algoritmos para caminhos mínimos.
    • Prática: Resolva desafios que envolvam encontrar componentes conectados, ciclos, e caminhos mínimos (como Dijkstra ou BFS em grafos não ponderados).
  • Dicas Importantes:
    • Use listas de adjacência para representar grafos e pratique implementações tanto recursivas quanto iterativas.

Semana 9: Programação Dinâmica (DP)

  • Objetivo: Desenvolver uma mentalidade para identificar subproblemas que se repetem.
  • Atividades:
    • Estudo Teórico: Conceitos de memoization versus tabulação, e como reconhecer problemas passíveis de DP.
    • Prática: Exercícios clássicos – Fibonacci, knapsack, longest common subsequence, e longest increasing subsequence.
  • Dicas Importantes:
    • Crie tabelas ou diagramas para rastrear suas soluções. Isso é essencial para debugar e otimizar algoritmos dinâmicos.

Semana 10: Algoritmos Gulosos (Greedy) e Técnica de Divisão de Problemas

  • Objetivo: Aprender a identificar e aplicar soluções “gulosas” quando aplicáveis.
  • Atividades:
    • Estudo Teórico: Explorar o conceito de escolhas locais que levam à solução global, com exemplos práticos.
    • Prática: Resolva problemas como seleção de atividades, mudanças de moedas e interval scheduling, onde a abordagem greedy é eficiente.
  • Dicas Importantes:
    • Sempre questione se a solução greedy garante a otimização total. Às vezes, ela funciona impecavelmente; em outras, pode ser um ponto de partida.

Semana 11: Simulações e Revisão Integrada

  • Objetivo: Unir os conhecimentos adquiridos e aumentar a velocidade de resolução.
  • Atividades:
    • Simulações de Entrevistas: Resolva problemas com limite de tempo para simular o ambiente de uma entrevista.
    • Revisão Cruzada: Identifique os tópicos em que você tem mais dificuldade e refaça exercícios para consolidar o aprendizado.
  • Dicas Importantes:
    • Grave-se explicando suas soluções (mesmo que só para você) para melhorar a clareza na comunicação do raciocínio.

Semana 12: Revisão Final, Soft Skills e Estratégias de Entrevista

  • Objetivo: Refinar sua abordagem e preparar sua “mindset” para a entrevista.
  • Atividades:
    • Revisão Geral: Faça uma recapitulação rápida dos tópicos estudados, focando em exercícios errados ou que geraram dúvidas.
    • Comunicação do Raciocínio: Pratique “pensar em voz alta” enquanto resolve problemas, explicando passo a passo como chegar à solução.
    • Feedback e Reflexão: Se possível, participe de sessões de mock interviews ou grupos de estudo para trocar feedback.
  • Dicas Importantes:
    • Além dos algoritmos, esteja preparado para perguntas comportamentais. A clareza na comunicação e a capacidade de justificar suas escolhas são tão importantes quanto a solução em si.

Considerações Adicionais

  • Flexibilidade e Adaptabilidade: Se sentir que algum tópico precisa de mais tempo, ajuste o cronograma. A ideia é que você se sinta confortável e confiante em cada área antes de avançar.
  • Registro de Progresso: Mantenha um diário de estudos, anotando os acertos, erros e insights. Isso irá ajudar a identificar padrões nos seus desafios e a medir a evolução.
  • Diversificar Fontes: Além do HackerRank, explore outras plataformas (como LeetCode, CodeSignal ou GeeksforGeeks) e recursos teóricos (livros, vídeos, blogs) para ampliar sua visão sobre cada tópico.
  • Saúde Mental e Descanso: Lembre-se de reservar tempo para pausas e reflexão. Algoritmos exigem tanto foco quanto criatividade, e um ritmo saudável de estudo é fundamental para manter a clareza mental.

Esse plano visa não só a prática intensa de resolução de problemas, mas também a internalização da lógica e a comunicação eficaz do seu raciocínio, que são pontos cruciais em entrevistas de emprego. Se você se aprofundar em cada tópico, registrando dúvidas e reforçando as áreas mais desafiadoras, estará preparado para enfrentar tanto as questões técnicas quanto as dinâmicas das entrevistas.

Caso queira expandir ainda mais sua preparação, podemos também explorar estratégias para designar revisões rápidas de complexidade ou até mesmo integrar estudos sobre design patterns e sistemas de arquitetura—tópicos que podem surgir em processos seletivos mais avançados.

Three Sum – 3Sum

Força Bruta

1class Solution {
2    public List<List<Integer>> threeSum(int[] nums) {
3        List<List<Integer>> threeSums = new ArrayList<>();
4        
5        for (int i = 0; i < nums.length; i++) {
6            for (int j = i+1; j < nums.length; j++) {
7                for (int k = j+1; k < nums.length; k++) {
8                    if (nums[i] + nums[j] + nums[k] == 0) {
9                        List<Integer> sortedAnswer = Arrays.asList(nums[i], nums[j], nums[k]);
10                        Collections.sort(sortedAnswer);
11                        if (!threeSums.contains(sortedAnswer)) {
12                            threeSums.add(sortedAnswer);
13                        }
14                    }
15                }
16            }
17        }
18        
19        return threeSums;
20    }
21}

Complexidade de Tempo/Espaço

  • Complexidade de tempo:O(n³)
  • Complexidade do espaço: O(len(answer))(a complexidade do espaço será dimensionada de acordo com o número de trigêmeos encontrados)

Hashmap de soma dupla

1class Solution {
2    public List<List<Integer>> threeSum(int[] nums) {
3        Arrays.sort(nums);
4        List<List<Integer>> threeSums = new ArrayList<>();
5        for (int i = 0; i < nums.length; i++) {
6            if (i > 0 && nums[i] == nums[i - 1]) {
7                continue;
8            }
9            int target = -nums[i];
10            int l = i + 1, r = nums.length - 1;
11            while (l < r) {
12                if (nums[l] + nums[r] == target) {
13                    threeSums.add(Arrays.asList(nums[i], nums[l], nums[r]));
14                    l++;
15                    while (l < r && nums[l] == nums[l - 1]) {
16                        l++;
17                    }
18                } else if (nums[l] + nums[r] < target) {
19                    l++;
20                } else {
21                    r--;
22                }
23            }
24        }
25        return threeSums;
26    }
27}

Complexidade de Tempo/Espaço

  • Complexidade de tempo:O(n²)
  • Complexidade do espaço: O(n)(ou O(1)se classificado no local)

Two Sum – 2Sum

Força Bruta

1import java.util.HashMap;
2
3 class Solution {
4  public static int[] twoSum(int[] nums, int target) {
5      // 1. Iterate over every possible number pair
6      for (int i = 0; i < nums.length; i++) {
7          // j is always ahead of i so that we don't re-evaluate already evaluated sums
8          for (int j = i + 1; j < nums.length; j++) {
9              // 2. Check if a given pair adds up to our target
10              if (nums[i] + nums[j] == target) {
11                  // Return the indices when a pair has been found
12                  return new int[]{i, j};
13              }
14          }
15      }
16      // Return an empty array if no pair is found
17      return new int[]{};
18  }
19 }

Análise de Complexidade Temporal/Espaço

  • Complexidade de Tempo: O(n^2), onde né o tamanho do array. Para cada número, precisamos avaliar todos os outros números do array.

  • Complexidade do espaço: O(1), desconsiderando a entrada, todas as outras variáveis ​​têm espaço constante.

Tabela de hash

1import java.util.HashMap;
2
3 class Solution {
4  public static int[] twoSum(int[] nums, int target) {
5        // Our hash table that stores at which index the number is at
6        HashMap<Integer, Integer> numToIndex = new HashMap<>();
7        
8        // 1. Iterate over every number in the array
9        for (int i = 0; i < nums.length; i++) {
10            // 2. Calculate the complement that would sum to our target
11            int complement = target - nums[i];
12            
13            // 3. Check if that complement is in our hash table
14            if (numToIndex.containsKey(complement)) {
15                return new int[]{numToIndex.get(complement), i};
16            }
17            
18            // 4. Add the current number to our hash table
19            numToIndex.put(nums[i], i);
20        }
21        
22        // If no solution found, return an empty array
23        return new int[]{};
24    }
25 }

Complexidade de Tempo/Espaço

  • Complexidade de Tempo: O(n), onde né o tamanho do array. Iteramos sobre cada número no array e as operações de consulta/adição da tabela de hash levam um tempo constante.
  • Complexidade do Espaço: O(n), onde né o tamanho do array. Nosso mapa de hash armazena todos os números no array de entrada.

Past Tenses

Past Tenses

Simple Past

Definição

Ação finalizada no passado.

Situações de uso

Fatos concluídos
Sequência de eventos
Históricos ou rotinas

Exemplos

I watched a movie last night.
She visited Paris in 2020.
They finished the project yesterday.

Palavras-chave

yesterday
ago
last (week, year, night)
in (ano passado)

Estrutura

Sujeito + verbo regular (-ed) ou irregular (2ª coluna)

Erros comuns/dicas
Trocar regular/irregular
Esquecer “-ed”
Dica: revise a lista de verbos
Past Continuous
Definição
Ação em andamento no passado
Situações de uso
Ação interrompida por outra
Descrever contexto ou cenário no passado
Exemplos
I was studying when you called.
They were playing football at 5 p.m.
She was cooking while it was raining.
Palavras-chave
while
when
as
at (hora)
Estrutura
Sujeito + was/were + verbo-ing
Erros comuns/dicas
Trocar was/were
Esquecer “-ing” no verbo
Dica: was (I/he/she/it), were (you/we/they)
Past Perfect
Definição
Ação anterior a outra no passado
Situações de uso
Destacar o “passado do passado”
Sequência de fatos; justificar ação anterior
Exemplos
She had left before he arrived.
I had eaten when they called me.
They had finished the test before the bell rang.
Palavras-chave
before
after
by the time
already
just
Estrutura
Sujeito + had + particípio passado
Erros comuns/dicas
Esquecer particípio
Usar had + verbo no passado simples
Dica: use para deixar clara a ordem dos eventos
Past Perfect Continuous
Definição
Ação contínua ocorrendo antes de outra ação passada
Situações de uso
Destacar a duração da ação até certo ponto
Justificar motivos/efeitos visíveis no passado
Exemplos
I had been studying for two hours when you arrived.
She had been working there before she moved.
They had been waiting for the bus for thirty minutes.
Palavras-chave
for
since
until
when
all (day, morning, afternoon)
Estrutura
Sujeito + had been + verbo-ing
Erros comuns/dicas
Esquecer “been”
Confundir com Past Continuous
Dica: destaque a duração da ação antes de outro fato passado
Diferenças e Semelhanças
Simple Past vs Past Continuous
Simple Past: ação completa
Past Continuous: ação em andamento/foi interrompida
Past Perfect vs outros tempos
Past Perfect: deixa claro que a ação veio antes
Past Perfect Continuous vs outros tempos
Foco na duração antes de outro evento passado
Semelhanças
Todos referem-se a eventos no passado
Usados em narrativas do passado
Palavras-chave/Marcadores temporais
Simple Past: yesterday, ago, last, when, in (ano)
Past Continuous: while, when, as, at (hora)
Past Perfect: before, after, by the time, just, already
Past Perfect Continuous: for, since, until, when, all day
Dicas práticas gerais
Atenção à estrutura e aos marcadores
Pratique exemplos do cotidiano
Revise verbos irregulares com frequência
Não use had + verbo no passado simples, sempre particípio!

Top 100 Coding Test

HackerRank LeetCode
Two Sum
Reverse a Linked List
Merge Intervals
Longest Substring Without Repeating Characters
Binary Tree Inorder Traversal
Valid Parentheses
Search in Rotated Sorted Array
Merge Two Sorted Lists
Maximum Subarray
Word Break
Coin Change
Climbing Stairs
Subtree of Another Tree
Product of Array Except Self
Valid Anagram
Linked List Cycle
Find Minimum in Rotated Sorted Array
Combination Sum
House Robber
Longest Palindromic Substring
Word Ladder
Pow(x, n)
Rotate Image
Group Anagrams
Maximum Depth of Binary Tree
Insert Interval
Subsets
Palindromic Substrings
Minimum Path Sum
3Sum
Best Time to Buy and Sell Stock
Course Schedule
Linked List Random Node
Min Stack
Reverse Integer
Integer to Roman
Roman to Integer
Palindrome Number
Container With Most Water
Longest Valid Parentheses
Maximum Product Subarray
Search Insert Position
Unique Paths
Decode Ways
Jump Game
Word Search
Set Matrix Zeroes
Trapping Rain Water
Sudoku Solver
Spiral Order Matrix
Permutations
LRU Cache
Validate Binary Search Tree
Recover Binary Search Tree
Kth Largest Element
Merge K Sorted Lists
Flatten Nested List Iterator
Binary Tree Zigzag Level Order Traversal
Longest Consecutive Sequence
Graph Valid Tree
Course Schedule II
Valid Palindrome
Longest Common Prefix
Find Peak Element
Find the Duplicate Number
First Missing Positive
N-Queens
Minimum Window Substring
Rotate List
Word Search II
Basic Calculator
First Unique Character in a String
Serialize and Deserialize Binary Tree
Sort Colors
Find Median from Data Stream
Isomorphic Strings
Reverse Linked List II
Maximal Square
Largest Rectangle in Histogram
Binary Tree Maximum Path Sum
House Robber II
N-Queens II
Best Time to Buy and Sell Stock II
Clone Graph
Sliding Window Maximum
Merge Sorted Array
Find the Celebrities
Regular Expression Matching
Distinct Subsequences
Longest Increasing Subsequence
Palindrome Partitioning
Different Ways to Add Parentheses
Serialize and Deserialize BST
Range Sum Query
Jump Game II
Copy List with Random Pointer
Critical Connections in a Network
Coin Change 2
Path Sum
Number of Islands
Two Sum
Add Two Numbers
Longest Substring Without Repeating Characters
Median of Two Sorted Arrays
Longest Palindromic Substring
Zigzag Conversion
Reverse Integer
String to Integer (atoi)
Palindrome Number
Regular Expression Matching
Container With Most Water
Integer to Roman
Roman to Integer
Longest Common Prefix
3Sum
3Sum Closest
Letter Combinations of a Phone Number
Valid Parentheses
Merge Two Sorted Lists
Remove Nth Node From End of List
Generate Parentheses
Merge k Sorted Lists
Swap Nodes in Pairs
Reverse Nodes in k-Group
Remove Duplicates from Sorted Array
Remove Element
Implement strStr()
Divide Two Integers
Substring with Concatenation of All Words
Next Permutation
Longest Valid Parentheses
Search in Rotated Sorted Array
Find First and Last Position of Element in Sorted Array
Search Insert Position
Valid Sudoku
Sudoku Solver
Count and Say
Combination Sum
Combination Sum II
First Missing Positive
Trapping Rain Water
Multiply Strings
Jump Game
Permutations
Permutations II
Rotate Image
Group Anagrams
Pow(x, n)
N-Queens
N-Queens II
Maximum Subarray
Spiral Matrix
Jump Game II
Merge Intervals
Insert Interval
Length of Last Word
Spiral Matrix II
Set Matrix Zeroes
Search a 2D Matrix
Sort Colors
Minimum Window Substring
Search in Rotated Sorted Array II
Remove Duplicates from Sorted List
Remove Duplicates from Sorted List II
Subsets
Word Search
Climbing Stairs
Set Matrix Zeroes
Search a 2D Matrix II
Sort Colors
Minimum Path Sum
Unique Paths
Unique Paths II
Subsets II
Word Ladder
Word Ladder II
Longest Consecutive Sequence
Palindrome Partitioning
Restore IP Addresses
Distinct Subsequences
Largest Rectangle in Histogram
Maximal Rectangle
Scramble String
Interleaving String
Minimum Edit Distance
Decode Ways
Unique Binary Search Trees
Unique Binary Search Trees II
Validate Binary Search Tree
Binary Tree Maximum Path Sum
Flatten Binary Tree to Linked List
Populating Next Right Pointers in Each Node
Populating Next Right Pointers in Each Node II
Binary Tree Inorder Traversal
Binary Tree Preorder Traversal
Binary Tree Postorder Traversal
Symmetric Tree
Binary Tree Level Order Traversal
Binary Tree Zigzag Level Order Traversal
Maximum Depth of Binary Tree