EXPLICAÇÃO de um DESAFIO TÉCNICO da GOOGLE | First Missing Positive

Поділитися
Вставка
  • Опубліковано 22 лис 2023
  • No vídeo de hoje, vamos resolver um desafio técnico de entrevistas da Google! :)
    O desafio se chama First Missing Positive e é considerado difícil pelo LeetCode (nível Hard).
    Além de explicar, (fazer um tutorial de como resolver), vou mostrar 3 soluções possíveis, e fazer uma análise assintótica de todas elas.
    Link das soluções e benchmarks:
    github.com/phenpessoa/lc/tree...
    --------------------------------------------
    Não deixe de se inscrever e deixar o like!
    Bem vindo ao canal phenpessoa :)
    --------------------------------------------
    Minhas redes sociais:
    ✅ github.com/phenpessoa
    ✅ / phenpessoa
    ✅ x.com/phenpessoa
    ✅ / phenpessoa
    ✅ / phenpessoa
    ✅ / phenpessoa
    ✅ / phenpessoa
    Contato profissional:
    phenpessoayt@gmail.com
    --------------------------------------------
    #programação #desafio #google

КОМЕНТАРІ • 99

  • @lohranrocha
    @lohranrocha 7 місяців тому +22

    É a primeira vez que eu consigo assistir um vídeo complexo e entender pelo menos a linha de raciocínio pra resolvê-lo. Consigo fazê-lo? não! mas só de acompanhar a estrutura de pensamento da até vontade de estudar mais pra chegar nesse nível. Parabéns, bro!

  • @thisiscleverson
    @thisiscleverson 8 місяців тому +49

    Esse canal era oq faltava no youtube!

  • @marquinhos0550
    @marquinhos0550 8 місяців тому

    Por favor, continue com os vídeos de desafios! Teu canal é incrível!

  • @josecarlos-on4re
    @josecarlos-on4re 8 місяців тому +2

    Finalmente um canal de conteúdo com informações diretas, objetiva com tudo que precisamos saber

  • @dulii4238
    @dulii4238 8 місяців тому +1

    Irmao seu conteudo e muito top, realmente e muito bom, eu ia te pedir pra voce trazer conteudos de algoritimos involvendo logica sabe assim como esse, mas para as pessoas que sao iniciantes que estao comecando agora, vai ajudar muito cara, meus parabens pelo conteudo

  • @argomes777ify
    @argomes777ify 5 місяців тому +1

    Que canal fantástico, sou desenvolvedor a 15 anos e gostei bastante.

  • @LuizAzevedown
    @LuizAzevedown 8 місяців тому +1

    Parabéns pelo videio e pela didática! Espero que continue trazendo mais conteúdos desse gênero e em Go...

  • @leandrocesar4000
    @leandrocesar4000 7 місяців тому

    Esse canal é incrível muito bom e quando usar termos mais simplificados vai ser de grande ajuda.

  • @italo.magalhaes
    @italo.magalhaes 8 місяців тому

    Absurda a qualidade do teu conteúdo, parabéns meu querido

  • @fabiomartinsbr
    @fabiomartinsbr 5 місяців тому

    Parabéns @phenpessoa! Muito legal o canal.

  • @caiocutrim3596
    @caiocutrim3596 8 місяців тому +1

    Cara que conteúdo maneiro, Deus abençoe. Ganhou mais um escrito

  • @medanielsantos
    @medanielsantos 8 місяців тому

    Cheguei dando like, já sei que vai ser top, ansioso por um curso seu

  • @eduardocerutti
    @eduardocerutti 8 місяців тому +1

    Teus videos estão me fazendo gostar de leet code novamente, bom trabalho mestre

  • @User_0x0000LDMR
    @User_0x0000LDMR 7 місяців тому

    Segundo vídeo que vejo do canal e já me inscrevi, ótimo conteúdo

  • @Lmfenhir
    @Lmfenhir 7 місяців тому

    Cara era exatamente o tipo de conteúdo que estava procurando, e ainda com uma didática maior que a dos indianos hahaha, você ta de parabéns.

  • @TheAbimaelST
    @TheAbimaelST 8 місяців тому +4

    Mais um conteúdo premium! Parabéns mano!

  • @caiocesarmelolopes2156
    @caiocesarmelolopes2156 7 місяців тому

    Muito bom! Parabéns pelo conteúdo!

  • @mandrakememes319
    @mandrakememes319 7 місяців тому

    cara parabéns, a didática está bem legal, assim como os canais americanos o ritmo de fala está perfeito.

  • @cmhanft
    @cmhanft 7 місяців тому

    Cliquei em inscrever logo nos primeiros minutos, ótimo conteúdo.
    Se puder fazer algumas soluções em Python seria bom também
    Sucesso Pedro.

  • @GabrielAlves-nj9or
    @GabrielAlves-nj9or 8 місяців тому

    Caralho mano
    Tu é um gênio, nmrl
    O conteudo dos seus videos caiu em uma boa hora pra mim, valeu!

  • @Thijv
    @Thijv 7 місяців тому

    Ótimo conteúdo, parabéns 👏👏👏

  • @lucasaraujo6.
    @lucasaraujo6. 7 місяців тому

    O cara é bonito, charmoso e ainda programa em go. Apaixonei!

  • @xFlayBR
    @xFlayBR 8 місяців тому

    carai mlk, tu é brabo!
    parabéns!! usando go ainda, top!!!

  • @DevCearensePeloMundo
    @DevCearensePeloMundo 8 місяців тому

    Muito bom, consegui entender todas as soluçôes, bem bacana esse exercício

  • @rodrigolopes284
    @rodrigolopes284 8 місяців тому +3

    Sou um completo noob da programação, fazedor de CRUD e eu fico admirado com a qualidade dos teus vídeos.

    • @josehelvis674
      @josehelvis674 7 місяців тому

      Fazedor de crud kkk, eu também

  • @gregjfarias
    @gregjfarias 5 місяців тому

    caraca, que aula
    eu to migrando pro go agora e isso foi uma aula foda

  • @igorbatista1735
    @igorbatista1735 7 місяців тому

    Cara, conheci teu canal recentemente e estou impressionado com a qualidade dos vídeos, muito bem feito.
    PS: Não conhecia essa técnica de Swap em Go, poderia mandar alguma referência pra estudo? A sintaxe é um pouco exótica...

  • @danilopereiradeluca9403
    @danilopereiradeluca9403 7 місяців тому

    Muito boa explicação!

  • @Acqua_ff
    @Acqua_ff 7 місяців тому

    Humildemente, como um iniciante na programação eu não entendi foi merda nenhuma, mas eu achei muito da hora! Parabéns!

  • @laurolyra
    @laurolyra 7 місяців тому

    Acho que foi o primeiro vídeo com altíssima qualidade (técnica e didática) sobre resolução de desafios em português q eu já vi! tá de parabéns, Pedro!
    Em tempo: é o primeiro vídeo que eu tenho q assistir em velocidade 0,75 hahahahahahahhahaa

  • @vanio.almeida
    @vanio.almeida 7 місяців тому

    Muito bom, ao usar o len() uma única vez melhoraia ainda mais o código, não precisaria verificar o tamanho varias vezes.

  • @VitorOliveira-br5ts
    @VitorOliveira-br5ts 8 місяців тому

    Aguardando por mais conteúdo

  • @lucasemanuelsilva657
    @lucasemanuelsilva657 8 місяців тому

    muito bom os seus videos, parabéns!!!

  • @vagnerlandio
    @vagnerlandio 8 місяців тому +6

    Teu canal é o que estava faltando nesse UA-cam 🎉.
    O que mais tem no UA-cam são canais com cursos de linguagens e framework, react de vídeos e desenvolvimento de soft skills.
    Você não, você passa conhecimento que vai além de qualquer linguagem. 👏

  • @user-pv3yn8uf6i
    @user-pv3yn8uf6i 4 місяці тому

    Primeiro, muito bom o conteúdo, parabéns! Tem como construir uma solução sem o swap também, usando 2 variáveis de controle.

  • @luizaugusto7763
    @luizaugusto7763 8 місяців тому

    Vídeo muito interessante mano!

  • @luismerlini
    @luismerlini 6 місяців тому

    estou no quarto vídeo do canal, continue mano! ta ótimo!

  • @yago4614
    @yago4614 5 місяців тому

    acho que dava para usar a fórmula do somatório tbm, soma todos os elementos relevantes no vetor e subtrai esse valor do somatório até n, a resposta será o número faltante

  • @user-hh4bk8gu6y
    @user-hh4bk8gu6y 8 місяців тому

    cara nao para essa serie. muito foda, eu tenho que diminuir a velocidade de video sua capacidade de raciocinio eu nao acompanho kkk

  • @JotaScript
    @JotaScript 7 місяців тому +1

    Cara, faz um vídeo sobre Big O notation. Mostrando o que é e exemplos de códigos!

  • @jimmyfernandes634
    @jimmyfernandes634 5 місяців тому

    Top demais!

  • @matheusemanoel4108
    @matheusemanoel4108 8 місяців тому

    Que canal bom, sério

  • @MarcosVinicius-jf1mi
    @MarcosVinicius-jf1mi 8 місяців тому

    Muito foda, até parece simples a solução

  • @ieieldoria
    @ieieldoria 7 місяців тому

    Muito bom!

  • @diegobaga
    @diegobaga 8 місяців тому

    Excelente!

  • @gagunho
    @gagunho 8 місяців тому

    Que delicia de video cara!☺

  • @morph.developer
    @morph.developer 7 місяців тому

    Video de altissima qualidade, parabens pelo conteúdo.

  • @samuca.prodev
    @samuca.prodev 8 місяців тому +5

    Ei, você dá curso?
    HAHAHAHA/
    Vou assistir mais umas vezes, seu raciocínio é muito rápido, faz sentido mas entender o que você está aplicando e falando ali com clareza vai ser da hora. E mano, parabéns. Continua que isso tá muito bom. E que bom que você se posicionou diferente da maioria, essa pegada de trazer esses desafios é bem interessantes.

  • @edwolt
    @edwolt 7 місяців тому

    Eu pensei numa solução bem ruim mas que seria O(1) em espaço auxiliar e O(n) em tempo, mas depende de um detalhe que eu não é dito no enunciado, que o inteiro tenha um limite máximo (ser um int de 32 bits, de 64, etc, mas não funcionaria para bigint).
    O que daria para fazer é instanciar um array com uma posição para cada número possível, com todas as posições valendo false, assim que eu ler um numero eu troco o correspondente no vetor para true. Depois de percorrer todos os numeros, eu percorro o vetor e encontro a primeira posição com false.
    Essa minha solução é ruim porque apesar de ser O(1) em espaço auxiliar (o tamanho do vetor depende do tipo do inteiro, e não da quantidade de números), já para int32 eu estaria consumindo 4 Gigas de RAM para essa operaçao simple, para int64 nem se fala. e apesar de ser O(n) em tempo, o tempo para percorrer esse vetor auxiliar também é muito grande, mesmo que seja constante.
    Terminar de assistir o video para descobrir qual é a solução viável para o problema

  • @HuberthSouza
    @HuberthSouza 8 місяців тому

    Conteúdo sensacional

  • @gustavoandreronconi7555
    @gustavoandreronconi7555 7 місяців тому

    e ai Pedro, foi fazer o desafio e fiz de uma forma diferente.
    package main
    import "fmt"
    // challenge
    // given an unsorted integer array `nums`, return the smallest missing positive integer.
    // you must implement an algorithm that runs in O(n) and uses O(1) auxiliary space.
    func firstMissingPositive(nums []int) int {
    // def the max and min
    min := nums[0]
    for i := 0; i < len(nums); i++ {
    if i == len(nums)-1-i {
    if nums[i] < min {
    min = nums[i]
    }
    break
    }
    if nums[i] < nums[len(nums)-1-i] {
    if nums[i] < min {
    min = nums[i]
    }
    } else if nums[i] > nums[len(nums)-1-i] {
    if nums[len(nums)-1-i] < min {
    min = nums[len(nums)-1-i]
    }
    }
    }
    firstMissedNumber := min + 1
    for i := 0; i < len(nums); i++ {
    if nums[i] == firstMissedNumber {
    firstMissedNumber += 1
    i = -1
    }
    }

    fmt.Println(firstMissedNumber)
    return firstMissedNumber

    }
    func main() {
    nums := []int{
    0, 12,
    }
    firstMissingPositive(nums)
    }

  • @ewerton.valuecode
    @ewerton.valuecode 8 місяців тому +1

    Showw! Gastou quanto tempo para encontrar esta solução?

  • @ispobra1240
    @ispobra1240 8 місяців тому

    cheguei dando, já sei que vai ser top

  • @juliorafael3762
    @juliorafael3762 7 місяців тому

    Qualidade demais

  • @Lanbyteach
    @Lanbyteach 8 місяців тому

    Estava pensando em algo interessante para um próximo vídeo, e acho que você pode curtir.
    A proposta é construir um programa que busca por uma palavra específica em um texto, só que de uma forma um pouco diferente do convencional. Vamos dar uma olhada na representação hexadecimal e decimal da palavra desejada, convertendo-as em caracteres para fazer a busca.

  • @joaosantospereira8345
    @joaosantospereira8345 5 місяців тому

    Onde você achou esse problema?

  • @eziovieira6664
    @eziovieira6664 7 місяців тому

    Vai crescer

  • @victorbiasibetti
    @victorbiasibetti 8 місяців тому

    carai, mto bom mesmo!!!

  • @skleon
    @skleon 5 місяців тому

    Podendo usar o array inicial como armazenamento, uma solução mais simples é assim:
    Pega todos os números negativos do array inicial e troca pro tamanho do array (ambos são irrelevantes, mas assim fica sem negativos). E agora que o array não tem mais números negativos, é só aplicar a segunda solução (com o array de booleanos), mas em vez de usar o array de booleanos, vc pode usar o sinal dos números no array fornecido pra contabilizar a presença de cada número.

    • @marcos-fx4vu
      @marcos-fx4vu 4 місяці тому

      ai você está alocando mais memoria oque não pode pois a complexidade do espaço é de O(1)

  • @gabrielvasconcelos2166
    @gabrielvasconcelos2166 8 місяців тому

    O homi é bom

  • @maclaurinrocha2881
    @maclaurinrocha2881 8 місяців тому

    Como pode , só deu para ver agora 😢😢😢.
    Aula top TMJ

  • @victorsoligo1119
    @victorsoligo1119 6 місяців тому

    sabe muito

  • @gledsonrts5257
    @gledsonrts5257 5 місяців тому

    eu não sei se e so comigo mas quando ele explica sem o codigo fica mais difícil para mim entender o que ele esta falando, mas quando ele coloca o codigo faz sentido...

  • @gabrielmendes5993
    @gabrielmendes5993 8 місяців тому

    lanca um curso , ensina JS e GO !

  • @Adams456
    @Adams456 8 місяців тому +1

    Entender o que está acontecendo é fácil, difícil é ter a ideia

  • @user-hh4bk8gu6y
    @user-hh4bk8gu6y 8 місяців тому

    se tu lancar um curso de logica eu compro

  • @ramonportela7048
    @ramonportela7048 8 місяців тому

    no caso de funções recursivas o space complexity é O(n) e não O(logn)

  • @brunocarvalheiro3882
    @brunocarvalheiro3882 7 місяців тому

    Oi cara! Vê esta ideia... não sei se faz sentido !
    Pega no array de entrada.
    Marca a medida do array
    Começa a iterar o array de entrada.
    Se for o numero 1, elimina essa entrada do array, se não for, coloca um pointer e avança.
    Verifica se o proximo numero é menor que o pointer, se for, avança o pointer, se não for, avança na iteração. Se for numero 2, elimina.
    assim até à len do array. Quando uma posição é eliminada e essa posição tem um pointer, o pointer desce uma poisção até ao inicio do array.
    Quando termina, se o array tiver mais que 1 elemento, e o elemento mais baixo for maior que o len do array, é esse o numero. Se só tiver 1 elemento, e esse elemento for o len do array, é o len do array +1.

  • @programandoaos30
    @programandoaos30 8 місяців тому

    Como esse tipo de canal tem somente 3k74 inscritos? Qualudade pura!!

  • @gutembergdossantoscarvalho1189
    @gutembergdossantoscarvalho1189 8 місяців тому

    Eu não entendo nada de programação. Mas teria como usar o case.

  • @pedecabra3704
    @pedecabra3704 8 місяців тому

    👍 🔝

  • @auladeviolaogospel-cezarro8606
    @auladeviolaogospel-cezarro8606 5 місяців тому

  • @Bruno_Moraes2023
    @Bruno_Moraes2023 5 місяців тому

    conteúdo premium de graça, ai n tem como sou obrigado a me inscrever

  • @caiqueribeiro2130
    @caiqueribeiro2130 8 місяців тому

    Eu sempre me pergunto como que alguém consegue ter uma solução igual a terceira. Até a segunda eu pensaria, mas essa última eu não ia imaginar nunca 😮

    • @bebumescuro
      @bebumescuro 8 місяців тому

      O nome disso eh experiencia… qualquer um q ja está acostumado com desafios, sabe o q fazer e nao fazer

  • @Davisinhogameplay
    @Davisinhogameplay 8 місяців тому

    Pouco conhecimento grazadeus

  • @Dominic_Carioca
    @Dominic_Carioca 7 місяців тому

    Amigão, esse teste da google é para exercer qual profissão?

    • @phenpessoa
      @phenpessoa  7 місяців тому

      Engenheiro de software

  • @BlinderSShortS-wk7tb
    @BlinderSShortS-wk7tb 5 місяців тому

    Queria entender tudo isso, mas logo vou tá afiado

  • @pedromartinsfalleiros7721
    @pedromartinsfalleiros7721 7 місяців тому

    Por que não usar conjunto?

    • @tiagorafael9872
      @tiagorafael9872 7 місяців тому

      Por que só a inserção dos elementos no conjunto já quebraria a regra do O(n). Normalmente a estrutura que implementa um conjunto é algo próximo de uma árvore binária, a inserção e a busca seria O(log n). Somente a inserção de todos os elementos positivos no conjunto já seria O(n log n).

  • @Lanbyteach
    @Lanbyteach 8 місяців тому

    Muito estranho usa o len(num). No rust temos que usar uma trait para implementar, Trait é meio que uma interface

    • @phenpessoa
      @phenpessoa  8 місяців тому

      Rust tem uma pezinho mais chegado em OOP, Go vai mais na direção funcional/imperativa. Nesse caso em específico.

  • @fheonix5
    @fheonix5 2 місяці тому

    Eu ate entendi a bagaça mas eu nao faço um desse nivel

  • @pazfelipe
    @pazfelipe 5 місяців тому

    Assistir esse vídeo e declarar a minha burrice em nível astronômico 🤣🤣🤣🤣🤣

  • @tommyscxtt3833
    @tommyscxtt3833 8 місяців тому

    Como acho esses desafios?

    • @phenpessoa
      @phenpessoa  8 місяців тому

      No site leetcode tem vários!

    • @Dominic_Carioca
      @Dominic_Carioca 7 місяців тому

      ​@@phenpessoaAmigão, esse teste é oara exercer qualquer profissão?

  • @TheMonster1400original
    @TheMonster1400original 7 місяців тому +1

    E eu achava que sabia programar

  • @rafaelpimentelgomes8878
    @rafaelpimentelgomes8878 5 місяців тому

    n entendi nada

  • @mikesantos4707
    @mikesantos4707 8 місяців тому

    Sou sênior e programado desde 2021 e não entendi quase nada do vídeo.

  • @David55293
    @David55293 7 місяців тому

    tenho que estudar mais

  • @Songs_For_Hearts
    @Songs_For_Hearts 7 місяців тому

    UMA CRITICA CONSTRUTIVA; NAO PRECISA FALAR TAO RAPIDO; O CONTEUDO EH BOM; ABRACOS;