O LeetCode que mais cai em entrevista

Sdílet
Vložit
  • čas přidán 12. 09. 2024
  • 📚 Livro para entender estruturas de dados e algoritmos: amzn.to/4bYu4VE

Komentáře • 84

  • @thiagomatu
    @thiagomatu Před 6 měsíci +42

    Conteúdo top Augusto, caramba, que massa encontrar alguém que ajude a comunidade dessa maneira por aqui no YT!

    • @AndrePaganotto
      @AndrePaganotto Před 5 měsíci +2

      No Brasil né, realmente excelente o conteúdo. A altura do da gringa

    • @ernestofamorim
      @ernestofamorim Před 4 měsíci +1

      ​​@@AndrePaganottoverdade demais isso aí. O conteudo aqui do Brasil geralmente são coisas muito básicas ou cara tentando vender curso.

    • @williamrosa8577
      @williamrosa8577 Před 4 měsíci

      ​@@AndrePaganotto Tem recomendações de canais gringos que fazem esse tipo de conteúdo?

    • @AndrePaganotto
      @AndrePaganotto Před 4 měsíci

      @@williamrosa8577
      Canais focados em problemas algoritmicos como esse aqui tem o NeetCode e o Colin Galen (o galen é focado em programação competitiva então é um nivel bem mais avançado de problemas)
      Canais excelentes sobre matemática e problemas algoritmicos no geral:
      3blue1brown
      Numberphile

    • @williamrosa8577
      @williamrosa8577 Před 4 měsíci

      @@AndrePaganotto Obrigado!

  • @MrYre
    @MrYre Před 5 měsíci +87

    não sei se ficou tão claro que um dicionário implementa um hash map **por padrão**.
    Então quando vc usa um .get(), ele nao percorre o dicionário inteiro procurando o valor, ele gera o hash do item buscado, e consegue responder em O(1) se está lá ou não.
    Talvez por isso tenha ficado um pouco confuso para algumas pessoas.
    A simplicidade da linguagem utilizada acabou deixando um descompasso entre a explicação e o código.
    Não queria desmerecer o vídeo nem nada, ficou incrível, mas achei que um pessoal tivesse ficado perdido por conta disso e achei importante explicar!

    • @davifariasp
      @davifariasp Před 4 měsíci +11

      Concordo! Seria bacana se ele tivesse proposto solução sem usar métodos da linguagem. Mas acho que sem querer ele deixou essa pra gente mesmo resolver kkkk

  • @leoodev
    @leoodev Před 5 měsíci +13

    to começando a estudar DSA após negligenciar por muito tempo durante minha carreira, já havia resolvido o two sum de maneira super fácil com a solução 1, mas é muito massa encontrar conteúdo como o seu explicando resolução desses problemas do leetcode de maneira otimizada e mostrando a aplicabilidade dos algoritmos e estruturas de dados apropriados

  • @edfell66
    @edfell66 Před 5 měsíci +13

    Caraca, essa solução 3 é bem fora da caixinha pra mim. Estou um pouco enferrujado nesse tipo de algoritmo no dia a dia. Vou começar a praticar no Leetcode

  • @Xdetonando
    @Xdetonando Před 5 měsíci +36

    A segunda solução tem um problema, quando você dá um sort no array, você modifica os indices dos elementos dele, o que acaba inutilizando o algoritmo por que a resposta vai dar os indices incorretos.

    • @leonardomiguel1943
      @leonardomiguel1943 Před 2 měsíci +13

      Você pode manter o vetor original inalterado e criar uma cópia ordenada dele para fazer a busca. Depois basta procurar a posição dos elementos da solução no vetor original (o que mantém a complexidade temporal de nlogn). Problema disso: armazenamento de 2n elementos na memória.

    • @kyori_kyo
      @kyori_kyo Před 27 dny

      Da pra achar o valor
      Vc normalmente reatribui o nums.sort pra uma nova var
      Ou usa ele já em um loop
      De qualquer forma, você consegue buscar o índice na lista de vários jeitos
      O problema é que
      Aumenta a complexidade o que na minha opinião faria ela a pior solução

    • @mateus2075
      @mateus2075 Před 11 dny

      ​@@leonardomiguel1943mas a hash dele tbm faz isso. Cria uma copia (ate maior, pq armazena chave e valor) do "banco de dados" na memória (pensando num cenário com muito mais dados)

    • @gabrielcarvalho9156
      @gabrielcarvalho9156 Před 3 dny

      @@leonardomiguel1943 o problema é que pra vc procurar a posição dos elementos no array original seria O(n), não? pq se o array não esta ordenado, não teria como fazer uma busca binaria, por ex.

    • @leonardomiguel1943
      @leonardomiguel1943 Před dnem

      @@gabrielcarvalho9156 não pensei muito à fundo mas a princípio, O(n) é bom. Essa busca não aumentaria a complexidade. Buscar cada um poderia gerar um trabalhinho a mais, mas em termos de complexidade se manteria O(nlogn)

  • @Sniper-gc4mf
    @Sniper-gc4mf Před 7 měsíci +2

    Parabéns pelo seu conteúdo 👏👏👏👏
    Obrigado por nós compartilhar

  • @lucasvillani5484
    @lucasvillani5484 Před 5 měsíci +3

    Eu pensei na última solução, por causa do x + y = 9, e o x = 9 - y.
    Entretanto, usei o try para tentar acessar o index da lista, arr.index(x), invés de armazenar tudo em um dicionário.
    Problema bem legal, que o conhecimento mais básico em sistemas lineares já dá uma ajuda.

  • @paulos.9537
    @paulos.9537 Před 7 měsíci +2

    Cara, obrigado por dedicar um tempo a nos explicar isso!

  • @sDaviVieira
    @sDaviVieira Před 7 měsíci +2

    Augusto, quando que você vai lançar seu curso de Estrutura de Dados? Você é brabo!

  • @porcariasposttada
    @porcariasposttada Před 2 měsíci +1

    Fui inventar de fazer esse exercício dps de ver esse vídeo, continueo com dificuldade e tive que ver denovo KASOEKOASKOEKOASEKOASOK
    programar é uma das coisas existentes

  • @Jessicalewinter
    @Jessicalewinter Před 4 měsíci +1

    Se o array já tiver ordenado a melhor solução é o two pointers. Mas com o array não ordenado, a melhor solução realmente é com hash map. Muito boa sua explicação 🎉

  • @arturcamposcamara6772
    @arturcamposcamara6772 Před 5 měsíci +7

    Super simples -> demorei 2 semanas para fazer e ainda tive que ver tutorial de indiano na net

    • @magichatake
      @magichatake Před 5 měsíci

      kkkk tbm to nessas mano... e olha q to há 8 anos já na area, essas coisas de algoritmo sempre me pegam

    • @alexandrecastro9528
      @alexandrecastro9528 Před měsícem +1

      Só um indiano fez isso sem consultar outro indiano

    • @gabrielsilveira2230
      @gabrielsilveira2230 Před 3 dny

      @@magichatake te dizer que esse relato tirou um pouco de peso na minha consciência, estava me sentindo um merda porque não fazia a mínima ideia de como resolver isso

  • @vitvitvitvitvitvitvitvit
    @vitvitvitvitvitvitvitvit Před 5 měsíci +3

    resolvi isso esses dias na faculdade hshshakdjw. foi na força bruta. extremamente inteligente essa ultima solução, mas precisa pensar um pouco fora da caixa. preciso entender melhor esse assunto de complexidade dos algoritmos. Recomenda algum livro/conteúdo online?

    • @23f09crz
      @23f09crz Před 5 měsíci +3

      pra introdução aquele “entendendo algoritmos” é muito bom, ele mostra uns conceitos e algoritmos bem interessantes de forma simples

    • @EdneyMaximun
      @EdneyMaximun Před 5 měsíci +3

      Procura sobre analise assintótica, aqui no youtube tem videos sobre que explicam toda essa área de análise e complexidade de algoritmos

    • @vitvitvitvitvitvitvitvit
      @vitvitvitvitvitvitvitvit Před 5 měsíci

      obrigado, senhores 🔥

  • @almeidaGGG_
    @almeidaGGG_ Před 5 měsíci

    Eu pensei em fazer a primeira solução bruta, verificando antes se o valor do array é maior que nove. Mas dps percebi q só funcionaria se na questão ele garantisse que só teria numeros positivos. Muito legal as outras soluções, aprendi algo aqui hoje.

  • @mateus2075
    @mateus2075 Před 11 dny +4

    A soluçao 3 é bem legal, mas tbm tem que considerar que ela copia toda a array, dobrando o armazenamento (pensando em um banco bem maior).
    Considerando isso, achei a soluçao 2 mais otimizada.

  • @sharlockholmes4742
    @sharlockholmes4742 Před 5 měsíci +3

    me sinto burro vendo seus videos KKK cara tu e muito foda slk

    • @magichatake
      @magichatake Před 5 měsíci +1

      pra mim qualquer coisa de algoritmo me faz me sentir burro

  • @RenatoMinatoBR
    @RenatoMinatoBR Před 5 měsíci +1

    Augusto, você poderia fazer um exemplo assim, mas com valores reais de um possível sistema, tipo nome, cpf, endereço, idade... Porque tipo, fica muito abstrato apenas números. Estou iniciando na programação e gostaria de entender, onde essa solução na prática ajudaria em um "possível" sistema. Agradeço, desde já! =D

    • @Carloskypp
      @Carloskypp Před 5 měsíci +3

      Então, questões de leetcode são para sistemas que necessitam de maior performance. Em um geral, sistemas comuns que tudo que fazem é cadastrar dados em um lugar e mostrar em outro nunca vão precisar implementar algo do tipo.
      eu trabalho com engenharia de dados e recentemente precisei fazer um sistema de cálculo que precisava percorrer por petabytes de informação para conseguir fazer algumas operações, nesse caso esses conceitos me foram uteis pq criei estrutura de dados que organiza os dados que eu vou precisar para aquelas operações de maneira que fica muito mais rápido de acessar

  • @raphael.portela
    @raphael.portela Před 4 měsíci

    irmão, parabens pelo seu conteudo diferenciado? vc acha que progredir no livro Cormen : introduction to algorithms , iria me ajudar nesse aspecto, ou é mais ficar praticando e batendo cabeça em leetcode, exercism(no caso de aprender uma linguagem nvoa)? tens algum livro ou algum material que te ajudaram qd vc ainda não tinha essa base sólida. Sou Dev frontend(2 anos de xp), me aprofundando em back e querendo aprimorar essa parte de lógica

  • @mendes1512
    @mendes1512 Před 7 měsíci

    Muito bom, gosto muito dos seus vídeos

  • @TheClaudiolista
    @TheClaudiolista Před 7 měsíci

    Obrigado pelo conteúdo e pelas dicas

  • @badbass555
    @badbass555 Před měsícem

    Cabra inoxidável da peste, [Rapaz brilhante!] Oh raios, os recrutadores vão tirar esse teste da grade ahhahahah

  • @andersondossantoscruz3685
    @andersondossantoscruz3685 Před 4 měsíci

    Massa demais. A primeira solução que sempre vem a mente é brute force 😂

  • @samueleliassantosoliveira9897
    @samueleliassantosoliveira9897 Před 5 měsíci +1

    O que acha de primeiro retirarmos os elementos maiores que o Target e depois aplicar a melhor solução? Acho que isso depende também do tamanho do nosso array inicial né (Sou apenas um estagiário curioso)

    • @Carloskypp
      @Carloskypp Před 5 měsíci

      Isso só incrementa uma percorrida inteira no array

    • @vito866
      @vito866 Před 29 dny

      pra fazer isso vc teria que ou percorrer uma vez inteira o vetor a mais ou ordenar ele
      de qualquer dos jeitos fica mais caro

  • @filipeangelo8586
    @filipeangelo8586 Před 4 měsíci

    Que video Topppp! Qual programa você usa para explicar?

  • @alefrodrigopereira9708
    @alefrodrigopereira9708 Před 3 měsíci

    Percorrer toda a array e criar uma array intermediária (para positivos não é possível a soma de 2 inteiros dar nove para números maiores ou iguais a 9) no caso de números positivos não seria interessante? A última abordagem é muito boa para casos de uso geral, aí funcionaria se a array problema tivesse números negativos ou estou equivocado?

  • @Jiquiricacontagemregressiva

    achei a opcao 2 paia pro leetCode em si, pq ele tem os resultados exatos la ja. quando muda o array o resultado vai mudar consequentemente, teria que percorrer a lista inicial mais uma vez pra saber a posição correta dos valores

  • @Bruno-fh7ec
    @Bruno-fh7ec Před 3 měsíci

    Putz, resolvi esse exercício com força bruta, na preguiça fui ver a melhor solução nas respostas da comunidade, li essa solução 3 mas não entendi... até chegar nesse vídeo, agora tá desenhado, valeu kkkk

  • @renanbrayner984
    @renanbrayner984 Před 5 měsíci

    Legal, eu fiz antes de ver o vídeo bem rapidinho e a solução do vídeo foi melhor que a minha 😂

  • @VulgoGS
    @VulgoGS Před 15 dny

    Eu como programador iniciante faria a "força bruta inteligente" eu só iria calcular os números q são menor q o target, não faz sentido calcular um número q é maior.

  • @homemdacosta
    @homemdacosta Před 5 měsíci +1

    Poderia usar um hashset ao invés do hashmap também, eu acho

  • @brunoferreira8558
    @brunoferreira8558 Před 12 dny

    É interessante ver as soluções, mas no dia a dia é tão útil quanto um cinzeiro numa moto.
    No primeiro projeto em equipe ninguém liga se vc resolveu 0 ou 138923 exercícios numa plataforma, parem de viajar.

  • @pdrferrari
    @pdrferrari Před 6 měsíci

    fantástico!

  • @Arthur_Bittencourt
    @Arthur_Bittencourt Před 5 měsíci

    Iniciante em programação aqui.
    Cara! Como você consegue chegar na logica da última solução, para mim, o nível de abstração é gigante. Explicação top cara! Qual programa você usa para fazer?

    • @LeviCacau
      @LeviCacau Před 5 měsíci +2

      De cara um iniciante realmente não chega nessa lógica, mas se vc quiser ficar bom e algoritmos e pensar fora da caixinha, tem que começar a resolver esses desafios, achar a solução sem pesquisar, e depois buscar uma forma de melhorar ela. Com o tempo vc vai ficando bom

    • @Arthur_Bittencourt
      @Arthur_Bittencourt Před 5 měsíci

      @@LeviCacau prática é tudo né

    • @kakashihatake8243
      @kakashihatake8243 Před 5 měsíci +1

      É bem difícil na verdade, mas com mta prática e com um bom conhecimento sobre estrutura de dados é possível.
      Mas quase ngm cheguem chega nesse tipo de solução de primeira. É normal vc pensar em soluções mais simples, como a primeira q ele mostrou. Quando vc faz isso vc entende melhor o problema, consegue criar abstrações para soluções mais otimizadas

    • @Carloskypp
      @Carloskypp Před 5 měsíci

      Eu discordo completamente do cara que falou que precisa pensar fora da caixa, todas questões usam ferramentas comuns
      Se você fizer muitas questões de leetcode você vai começar a identificar padrões e saber qual a melhor ferramenta/estratégia para resolver aquele problema. Ninguém quer que você crie um novo paradigma de programação em tempo real

    • @NullClass
      @NullClass Před 5 měsíci

      ​@@CarloskyppConcordo, Carlos. Só uma observação: o leetcode é mais manjado em geral, mas acredito que para exercícios ad hoc não se aplique. Coisas como teoria dos jogos também, esquece.
      Ademais, um exercício é realmente difícil quando mesmo quem conhece os paradigmas e algoritmos usados tem dificuldade de enxergar a solução. Caso contrário, bastaria ser uma enciclopedia.

  • @diegossena
    @diegossena Před 5 měsíci

    Utilizar hashmap é mais otimizado que utilizar um array simples? Penso que pelo algoritmo de busca do hashmap ele pode ser mais ótimo em certos casos. Mas nesse exemplo em específico a busca em array ganha, não? Já que o tamanho máximo do array será length - 1 sempre

    • @Adrianlemess
      @Adrianlemess Před 5 měsíci +3

      Oi amigo tudo bem? Não sou ele mas vou tentar ajudar.
      O que importa em big O eh a escala, o length que tu mencionou, tu não sabe quantos elementos pode ser, então pensa que se for um array e tu buscar o array, sempre q tu buscar vai ser O(n). Como tu está buscando dentro de um for, N*N eh O(N^2).
      O uso de HashMap eh bom porque buscar elementos no HashMap tem acesso constante, eh O(1), logo tu terá só o N do for em si

    • @kakashihatake8243
      @kakashihatake8243 Před 5 měsíci +1

      Por baixo dos panos acho q o complicador cria um array mesmo, então o acesso no hashmap deve ser O(1)

    • @magichatake
      @magichatake Před 5 měsíci +1

      Mano, hashmap é, na maioria das vezes, a melhor coisa pq ele aponta para o elemento na memória sem ter que procurar (fzr um "loop" até achar)

  • @nobunaga7800
    @nobunaga7800 Před 5 měsíci

    A lógica nem é tão complexa assim

  • @gustavoestivalet3453
    @gustavoestivalet3453 Před 7 měsíci

    Video muito bom!!!

  • @williamrosa8577
    @williamrosa8577 Před 4 měsíci

    Não entendi bem a última linha do código, principalmente a sintaxe:
    hasher[target-i] = idx
    Entendo que ele precisa fazer a comparação e armazenar no dicionário junto com o index da lista "nums" mas a sintaxe ficou confusa. Hasher é um dicionário, porque usou [ ] e não { }? E porque estamos atribuindo esse valor ao "idx" do for loop do "nums"? Pq isso não interfere no loop? Bugou minha mente total.
    Se alguém puder ajudar, agradeceria bastante kkkk joguei no chatgpt e ele reescreveu o código dizendo que estava errado, mas sei que não está.

    • @FantasMa_-up3vh
      @FantasMa_-up3vh Před 2 měsíci

      Opa, William! Tudo certo?! Vou tentar esclarecer as dúvidas, qualquer coisa, volte a falar.
      [NOTA]: Só para deixar claro, a linguagem utilizada para resolução do exercício é Python.
      1 - Sobre a variável 'hasher' : Você está correto! Ela é um dicionário. Você consegue atestar isso pela sua inicialização (hasher = {}). O que está ocorrendo na última linha é o povoamento do dicionário, e, só se chagará nela caso a soma pretendida ainda não tiver sido encontrada (isso precisa estar claro, se não estiver, reveja os trechos iniciais do vídeo que explicam a lógica de resolução pelo terceiro método)!
      "... porque usou [ ] e não { }?"
      O dicionário é uma estrutura de dados indexada pelo par 'chave-valor' e, para atribuir um novo valor a uma chave de um dicionário, fazemos assim: 'nome_do_dict[chave] = valor'; É por respeito a essa sintaxe que ele utiliza colchetes ([]) na última instrução, e não chaves ({}) - Está atribuíndo o valor 'idx' (índice do complemento), a chave 'target - i' (complemento que falta para somar 9).
      2 - Sobre a iteração : É MUITO importante entender que o loop não acontece diretamente sobre a lista 'nums', mas sim sobre uma pequena modificação da mesma. Note que o laço 'for' está atrelado ao retorno de uma função aplicada a 'nums', chamada de 'enumerate()'.
      Resumidamente, o que essa função faz é: para cada valor presente na lista a qual foi aplicada (nesse caso, 'nums'), haverá o posicionamento de um índice, de modo que, esse par/tupla (índice, valor) será adicionado a uma nova lista (uma lista ENUMERADA).
      Agora, é preciso saber que, por padrão, o 'for' do Python atua como um 'for each', de modo que para cada laço/iteração sobre a lista retornada por 'enumerate', estamos guardando o conteúdo do ÍNDICE em 'idx' e do VALOR em 'i'.
      "E porque estamos atribuindo esse valor ao "idx" do for loop do "nums"? Pq isso não interfere no loop?"
      Veja, em nenhum momento há atribuição de um novo valor a 'idx', e sim o contrário: o índice 'idx' é atribuído a uma determinada chave (target-i) do dicionário 'hasher'. De nenhuma forma, alteramos diretamente a lista "nums".
      Sei que a explicação está grande, e talvez um pouco confusa. Mas espero ter conseguido ajudar de alguma forma! Abraço!

  • @SanderRoni
    @SanderRoni Před 5 měsíci

    Eu tava pensando, ahh dá uma variável pra ele e faz um print(variavel[2]+variavel[3])
    Mas pensei, ele vai desconsiderar...

  • @ursochurrasqueira
    @ursochurrasqueira Před 5 měsíci

    muito top

  • @gabrielbhering1085
    @gabrielbhering1085 Před 4 měsíci

    com 50ms:
    class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
    hasher={}
    for i in range(len(nums)):
    if nums[i] in hasher.keys():
    return [i, hasher[nums[i]]]
    else:
    hasher[target - nums[i]] = i

  • @fellipemarques1247
    @fellipemarques1247 Před 4 měsíci

    Qual a linguagem que foi utilizada nesse vídeo? (na parte final)

  • @justfelipe7542
    @justfelipe7542 Před 6 měsíci +2

    Não consegui entender :(

    • @heraldo623
      @heraldo623 Před 6 měsíci +3

      A melhor solução é iterar pela lista e precomputar qual número somado ao elemento atual da lista é igual ao alvo (target). Isso evita você ter que iterar a lista multiplas vezes pra procurar qual número somado dá o alvo. Por isso é a melhor solução, complexidade O(N) (Big O de N, o tempo de execução no pior caso é proporcional ao tamanho da lista, N)

    • @franklinwanderson4316
      @franklinwanderson4316 Před 5 měsíci +1

      Obrigado @heraldolucena623

  • @bjsk6109
    @bjsk6109 Před 5 měsíci

    Qual a complexidade do metodo '.get()'? Isso não deveria ser levado em conta?

    • @GutoGalego
      @GutoGalego  Před 5 měsíci

      É O(1). Tem que ser levado em conta sim. Por exemplo, se .get() fosse O(n) ai o algoritmo ficava O(n2)

    • @bjsk6109
      @bjsk6109 Před 5 měsíci

      @@GutoGalego show de bola Augusto, obrigado!!

  • @rodrigorodriguescosta

    isso é a coisa mais inútil do mundo pra medir a habilidade de um desenvolvedor, desenvolver envolve MUITA COISA, um cara ruim que apenas estudar as principais questoes de algoritmo e ficar bom em algoritmo, ainda está longe de ser capaz de desenvolver softwares escaláveis, de qualidade e etc.
    um cara com experiência e sem treino de algoritmo, é muito mais fácil desenrolar uma tarefa que precise de um algoritmo complexo (nao é esse o caso) do que o contrário.
    se quiser passar em entrevista, infelizmente tem que treinar esses algoritmo inúteis pra depois em 99% do trabalho não precisar deles.
    Foda, mercado deixa de pegar muita gente excelente por causa disso

  • @williansteinagel
    @williansteinagel Před 5 měsíci

    1:47 ela seria n/2 + n log n, não? pq percorreria metade do array

    • @powersamurai686
      @powersamurai686 Před 5 měsíci

      mano me explica pf oq eu seria isso de "O de N ou N log N, brisei nessa parte"

    • @williansteinagel
      @williansteinagel Před 5 měsíci +1

      @@powersamurai686 Opa! São notações BigO, a gente usa pra determinar se, pra chegar em um resultado, um algoritmo passaria muitas ou poucas vezes por um determinado ponto (no caso o ponto é acessar um valor no array), ou seja, se os loops vão acabar rápido ou não kkk.
      O O(log n) significa que você vai acessar uma fração relativa ao tamanho do input - no caso o input é [2, 7, 11, 15], e se o input pedisse pra somar a primeira metade do array com a segunda, daria pra fazer com O(log n) e o resultado seria [13, 22];
      O O(n log n) significa que você vai acessar essa mesma fração mas para cada item do array - que seria procurar pra cada item um par no array que desse o resultado esperado, caso não fique claro usando o exercício do vídeo, tenta trocar a ordem dos itens que vai ajudar;
      O O(n) significa que você vai necessariamente passar por todos os items do array - tipo se vc precisar somar o array todo ou algo assim;
      O O(1) significa que praticamente não vai ter loop!
      tem outros tmbm, mas a ideia é por aí

    • @powersamurai686
      @powersamurai686 Před 5 měsíci +2

      @@williansteinagel valeu pela explicação, tava vendo um video pra entender e sua explicação complementou para o meu entendimento, valeuu!