Bem-vindo(a) a um curso completo de Algoritmos e Estruturas de Dados. Quando terminares o curso, terás conhecimento suficiente para otimizar drasticamente os teus programas, desenvolver uma intuição sobre a eficiência de cada um e destacar-te em entrevistas em grandes empresas de tecnologia, como Google, Meta, Amazon, entre outras. O curso começa com as bases de algoritmos e estruturas de dados e aprofunda-se nos tópicos mais populares desta área.
Grandes empresas de tecnologia, como Google, Meta, Netflix e Amazon, realizam entrevistas que exigem um conhecimento profundo de estruturas de dados e algoritmos. Ao concluíres este curso, ficarás preparado(a) para essas entrevistas.
Plataformas de freelancer como Toptal ou Turing requerem que os seus candidatos sejam fluentes em Estruturas de Dados e Algoritmos. Por isso, os seus processos de seleção incluem várias entrevistas focadas em conhecimentos algorítmicos.
📚 Pré-requisitos
Este curso foi desenhado para quem já tem alguma experiência numa linguagem de programação de uso geral (como Python, C++, Java ou C#) e pretende aprofundar conhecimentos no mundo de algoritmos e estruturas de dados. Antes de começares o curso, deves sentir-te à vontade para trabalhar com ciclos (loops), criar funções e utilizar as estruturas de dados embutidas (como listas, conjuntos ou mapas).
🤩 Resultados
No final deste curso, saberás como usar diversas estruturas de dados populares para escrever algoritmos eficientes, capazes de se desempenhar muito mais depressa do que soluções ingénuas. Vamos abordar as melhores práticas para escrever código de algoritmos e explicar como te preparares para entrevistas de caráter algorítmico.
Este curso foca-se na compreensão completa de cada conceito. Vais trabalhar com diferentes algoritmos e implementar variações para resolver muitos problemas, dominando cada um deles de forma aprofundada.
💻 Aprende Fazendo
🔥
O objetivo de aprender algoritmos não é apenas estudar teoria.
O objetivo é desenvolver capacidades de resolução de problemas.
Neste curso, vais aprender fazendo! Cada conceito apresenta vários desafios interativos que terás de resolver para avançares para o seguinte. Na verdade, são mais de 400 problemas de programação prática neste curso. Acreditamos que aprender com prática constante é a melhor forma de obter um conhecimento profundo. Aqui, terás exercícios tanto desafiantes como interessantes, para treinares cada conceito abordado.
⚡ Estuda Ao Teu Ritmo
Podes investir bastante tempo e completar vários níveis numa semana, ou avançar mais devagar e focar-te em cada conceito durante mais tempo. Decide tu o ritmo que faz mais sentido. A única exigência para concluir o curso com sucesso é consistência. Praticar 1 ou 2 horas todos os dias traz muito mais resultados do que dedicar apenas um dia por semana durante várias horas.
Para que não fiques bloqueado, existe um fórum para colocar perguntas. Nele, podes pedir ajuda ou ajudar outros, respondendo às suas questões nos desafios.
🎓 Currículo
Este curso concentra-se nos conceitos essenciais de Estruturas de Dados e Algoritmos, introduzindo cada um deles de forma intuitiva. Para tornar o processo mais divertido e envolvente, organizámos os conceitos em níveis, e completar cada nível significa que já dominaste um novo tópico. Eis os principais assuntos que vamos abordar:
Problemas de implementação
O algoritmo está diretamente descrito no enunciado
Uso de estruturas de dados básicas como arrays, dicionários, conjuntos, etc.
Operações bitwise
Representação binária de números (int → bin, bin → int)
Números negativos em binário
Operações bitwise OR, AND, XOR
Representação em base-k (base-10 → base-k, base-k → base-10)
Prefix sums
Prefix sum em 1D
Prefix sum em 2D
Janela deslizante / Dois ponteiros
Janela deslizante para encontrar a soma
Janela deslizante para encontrar valores únicos
Teoria dos números
Verificação de primalidade - ,
Crivo de Eratóstenes (Sieve of Eratosthenes)
Fatorização em primos
Máximo Divisor Comum (GCD) e Mínimo Múltiplo Comum (LCM)
Aritmética modular
Pesquisa binária
Pesquisa linear VS pesquisa binária
Encontrar um valor num array ordenado com pesquisa binária
Encontrar um número de ponto flutuante com precisão
Incluir a fronteira esquerda VS incluir a fronteira direita na resposta
Binary search para encontrar a resposta
Ordenação
Bogosort
Selection sort
Insertion sort
Bubble sort
Algoritmos gananciosos (Greedy)
Seguir uma estratégia gananciosa
Heurísticas gananciosas
Programação dinâmica
Programação dinâmica 1D (Fibonacci, etc.)
Problema de troco (moedas mínimas)
Problema de troco (número de formas)
Recursão
Fatores de ramificação
Códigos de Gray
Torres de Hanói
Divisão recursiva de um problema em subproblemas
Divide & Conquer & Ordenação avançada
Merge sort
Quick sort
Ordenação in-place
A complexidade de ordenação baseada em comparação é sempre ≥