Engenharia 360

ESCOLHA A ENGENHARIA
DO SEU INTERESSE

Digite sua Busca

Engenharia 360

100+ desafios de programação que aparecem em entrevistas de emprego [com solução]

Engenharia 360
por Larissa Fereguetti
| 04/03/2020 9 min

100+ desafios de programação que aparecem em entrevistas de emprego [com solução]

por Larissa Fereguetti | 04/03/2020
Copiado!

Muitas entrevistas de emprego relacionadas a programação (como para cargos de engenharia da computação/software, desenvolvedores e outros) são compostas não só por aquela tradicional entrevista de perguntas e respostas, mas também por desafios ligados ao cargo.

tela de computador com linhas de programação
Imagem: techsors.com

Para ajudar nesse processo, um perfil no GitHub está construindo um banco de dados com os problemas que aparecem com maior frequência. Esse perfil não só lista mais de 100 problemas, como também coloca exemplos, abordagem, solução e o custo computacional de cada um.

Abaixo, nós separamos uma lista traduzida com os links para cada problema e solução dados. Basta clicar no nome do problema e você será redirecionado para a página com os códigos e a explicação.

Problemas de programação:

Manipulação de matrizes e strings:

Tabelas hash:

  • Entretenimento em voo: Dada uma lista de tamanhos de filme (número inteiro) e uma duração de voo (número inteiro), determine se existem dois filmes que somam a duração total. Suponha que um usuário assista exatamente dois filmes, mas não o mesmo duas vezes.
  • Permutação de palíndromo: Dada uma string, verifique se sua permutação é um palíndromo.
  • Nuvem de palavras: Dada uma frase (string), retorne seu mapa de contagem de palavras.
  • Melhores pontuações: Dada uma lista de pontuações não ordenadas (número inteiro) e a pontuação mais alta possível (número inteiro), retorne uma lista classificada.

Algoritmos gulosos:

  • Ações da Apple: Dada uma lista de preços das ações (inteiro) em ordem cronológica, retorne o lucro máximo comprando mais cedo e vendendo mais tarde.
  • Maior produto de três: Dada uma lista de números inteiros, retorne o produto mais alto de três números.
  • Produto de todos os outros números: Dada uma lista de números inteiros, retorne uma lista correspondente em que cada índice contém o produto de todos os outros valores, exceto o valor nesse índice. E você não pode usar a divisão.
  • Aleatório local: Dada uma lista de números inteiros, embaralhe sua localização.

Classificação, pesquisa e logaritmos:

Árvores e grafos:

Programação dinâmica e recursividade:

  • Permutação recursiva de sequências: Escreva uma função recursiva para gerar todas as permutações de uma sequência de entrada. Suponha que cada caractere na sequência seja único.
  • Computar o enésimo número da sequência de Fibonacci: Dado um número inteiro n, escreva uma função para retornar o enésimo número de Fibonacci. Suponha que n é um número inteiro positivo.
  • Fazendo trocas: Dada uma quantidade de dinheiro e uma lista de denominações de moedas, calcule o número de maneiras de fazer esse valor com essas moedas disponíveis.

Filas e pilhas:

Listas vinculadas:

Manipulação de bits:

  • Lista de inteiros: Dada uma lista de números inteiros onde cada elemento aparece um número par de vezes, exceto um, encontre esse elemento com custo O (1).

Matriz/Sequência

  • Soma I: Dada uma matriz de números inteiros, retorne índices dos dois números, de forma que eles sejam adicionados a um destino específico. Você pode assumir que cada entrada teria exatamente uma solução e não poderá usar o mesmo elemento duas vezes.
  • Soma II: Dada uma matriz ordenada de números inteiros, retorne índices dos dois números, de forma que eles sejam adicionados a um destino específico.
  • Palíndromo válido: Dada uma sequência, determine se é um palíndromo, considerando apenas caracteres alfanuméricos.
  • Implementando strstr(): Implemente strstr () que encontra a primeira ocorrência da agulha de substring no palheiro de strings. Retorna -1 se a agulha não faz parte do palheiro.
  • Inverter palavras na sequência: Dada uma string, inverta-a palavra por palavra.
  • Subsequência mais longa sem caracteres repetidos: Dada uma sequência, encontre o comprimento da substring mais longa sem repetir caracteres.
  • Intervalos ausentes: Dada uma matriz inteira classificada em que o intervalo de elementos é [0, 99] inclusive, retorne os intervalos ausentes.
  • Distância entre sequências: Dadas duas sequências de caracteres, determine se ambas estão a uma mesma distância de edição.

Matemática:

Lista vinculada:

  • Mesclar lista vinculada: Mesclar duas listas vinculadas classificadas e retornar como uma nova lista.
  • Adicionar dois números: Dadas duas listas vinculadas que representam dois números não negativos, adicione-as e retorne-as como uma lista vinculada.
  • Trocar nós em pares: Dada uma lista vinculada, troque a cada dois nós adjacentes e retorne o head.

Árvore binária:

Manipulação de bits :

  • Número único I: Dada uma lista de números inteiros onde cada elemento aparece um número par de vezes, exceto um, encontre esse elemento com o custo O (1).
  • Número único II: Dada uma lista de números inteiros onde cada elemento aparece três vezes, exceto um, encontre esse elemento com custo O (1).

Diversos:

  • Matriz espiral: Dada uma matriz de m linhas x n colunas, retorne todos os elementos da matriz em ordem espiral.

Pilha:

  • Pilha mínima: Crie uma pilha que suporte push, pop, top e recuperação do elemento mínimo em tempo constante.
  • Parêntesis válidos: Dada uma lista de parênteses, determine se ela é válida.

Programação dinâmica:

  • Subindo escadas: Você está subindo uma escada. São necessários n passos para chegar ao topo. Cada vez você pode subir 1 ou 2 passos. De quantas maneiras distintas você pode subir ao topo?

Bit manipulation:

  • Operação de bits: Implemente algumas operações bit a bit comuns.
  • Inserção de bits: Dado dois números, m e n, e a posição de dois bits, i e j, insira m em n de modo que m comece no bit j e termine no bit i.

Matrizes e sequências:

Dois ponteiros:

  • Emparelhar com soma alvo: Dada uma matriz de números classificados e uma soma de destino, encontre um par na matriz cuja soma seja igual ao destino especificado.
  • Remover duplicatas: Dada uma matriz, remova as duplicatas.
  • Quadrado de uma matriz: Dada uma matriz classificada, crie uma nova matriz contendo quadrados de todo o número da matriz de entrada na ordem classificada.
  • Problema da bandeira da Holanda: Dada uma matriz contendo 0s (vermelho), 1s (azul) e 2s (branco), classifique a matriz de acordo com as cores da bandeira nacional da Holanda.

Ponteiros rápidos e lentos:

  • Ciclo da lista vinculada: Dado o cabeçalho de uma lista vinculada individualmente, escreva uma função para determinar se ela contém um ciclo.
  • Início de um ciclo de lista vinculada: Dado o cabeçalho de uma lista isolada, escreva uma função para encontrar o nó inicial do ciclo.
  • Número feliz: Escreva um algoritmo para determinar se um número está feliz. Qualquer número será chamado de número feliz se, depois de substituí-lo repetidamente por um número igual à soma do quadrado de todos os seus dígitos, nos levar a 1.
  • Meio de uma lista vinculada: Dado o cabeçalho de uma lista vinculada individualmente, escreva uma função para retornar o valor do meio.
  • Lista vinculada do palíndromo: Dado o cabeçalho de uma lista isolada, escreva uma função para determinar se é um palíndromo.
  • Reordenar uma lista vinculada: Dado o cabeçalho de uma lista isolada, escreva uma função para reordená-la, de forma que os nós da segunda metade sejam inseridos alternadamente aos nós da primeira metade na ordem inversa.

Intervalos mesclados:

  • Mesclar intervalos: Dada uma lista de intervalos, mescle todos os intervalos sobrepostos para produzir uma lista que tenha apenas intervalos mutuamente exclusivos.
  • Inserir intervalos: Dada uma lista de intervalos sem sobreposição classificados pela hora de início, insira um determinado intervalo na posição correta e mescle todos os intervalos necessários para produzir uma lista que tenha apenas intervalos mutuamente exclusivos.
  • Interseção de intervalos: Dadas duas listas ordenadas de intervalos, encontre a interseção entre eles.
  • Conflito de compromissos: Dada uma lista de intervalos, verifique se algum deles está em conflito.

Ordenação cíclica:

  • Ordenação cíclica: Dada uma matriz que contém n objetos em que cada objeto, quando criado, recebeu um número exclusivo de 1 a n com base em sua sequência de criação. Isso significa que o objeto com o número de sequência 3 foi criado logo antes do objeto com o número de sequência 4. Escreva uma função para classificar os objetos no número de sequência de criação com custo O (n) e sem espaço extra.
  • Números ausentes: Dado um array contendo n números retirados do intervalo de 1 a n. Pode ter duplicatas. Encontre todos os números ausentes.
  • Número ausente: Dada uma matriz que contém n números distintos retirados do intervalo de 0 a n. Como a matriz possui apenas n números do total de n + 1, encontre o número ausente.
  • Encontrar duplicata: Dada uma matriz que contém n + 1 números retirados do intervalo de 1 a n. Ele possui apenas um número duplicado, mas pode ser repetido ao longo do tempo. Encontre-o.
  • Encontrar duplicatas: Dado um array contendo n números retirados do intervalo de 1 a n. Pode ter algumas duplicatas. Encontre-as.
  • Encontrar par corrompido: Dada uma matriz que contém n + 1 números retirados do intervalo de 1 a n. Um dos números foi duplicado, o que também resultou na perda de um número. Encontre esses números.

Reverter lista vinculada:

  • Reverter lista: Dado o cabeçalho de uma lista vinculada individualmente, escreva uma função para retornar o novo cabeçalho da lista vinculada revertida.

Pesquisa em árvores:

  • Caminhar na árvore binária: Dada uma árvore binária, preencha os valores de todos os nós de cada nível da esquerda para a direita em sub-matrizes separadas.
  • Caminhar de forma reversa: Dada uma árvore binária, preencha os valores de todos os nós de cada nível na ordem inversa em sub-matrizes separadas.
  • Travessia em zigzag: Dada uma árvore binária, preencha os valores de todos os nós de cada nível em uma ordem em zigue-zague em sub-matrizes separadas.
  • Médias de nível: Dada uma árvore binária, preencha uma matriz para representar as médias de todos os seus níveis.
  • Profundidade mínima: Dada uma árvore binária, encontre a profundidade mínima, também conhecida como número de nós, no caminho mais curto, do nó raiz ao nó folha mais próximo.
  • Profundidade máxima: Dada uma árvore binária, encontre a profundidade máxima.
  • Sucessor da ordem de nível: Dada uma árvore binária e um nó, encontre o sucessor da ordem de nível do nó especificado. O sucessor da ordem de nível é o nó que aparece logo após o nó especificado no percurso da ordem de nível.

Profundidade da árvore em primeira busca:

  • Soma do caminho da árvore binária: Dada uma árvore binária e uma soma, descubra se a árvore possui um caminho da raiz para a folha, de modo que a soma de todos os valores de nó desse caminho seja igual à soma.
  • Soma do número dos caminhos: Dada uma árvore binária em que cada nó pode ter apenas um valor de dígito (0-9), cada caminho raiz-a-folha representará um número. Encontre a soma total de todos os números representados por todos os caminhos.

Árvores:

Ordenação:

Copiado!
Engenharia 360

Larissa Fereguetti

Doutoranda, mestre e engenheira. Fascinada por tecnologia, curiosidades sem sentido e cultura (in)útil. Viciada em livros, filmes, séries e chocolate. Acredita que o conhecimento é precioso e que o bom humor é uma ferramenta indispensável para a sobrevivência.

Comentários