Fonte: https://resources.workable.com/
Todos nós nos preparamos para uma entrevista de codificação em algum momento de nossas vidas. Se você está lendo este post hoje, principalmente dê uma entrevista em breve. Boa sorte! Que a força esteja com você!
O que é um teste de codificação? Se você estiver fazendo um teste de codificação pela primeira vez, deixe-me dizer o que esperar. O teste de codificação geralmente consiste em questões algorítmicas que testam suas habilidades em estruturas de dados e otimização de código.
As perguntas feitas neste segmento podem não estar diretamente associadas ao seu trabalho.. Na realidade, você quase certamente nunca escreverá códigos para verificar se um número é primo, um código para encontrar o palíndromo ou um código para encontrar a substring comum mais longa de 1000 correntes de corrida. O objetivo deste teste é medir seu procedimento de raciocínio e seu nível de programação.
Lembre-se de uma coisa antes de iniciar qualquer teste de codificação. Esta sugestão é válida nos casos em que o seu entrevistador está presente durante a realização do teste ou tem os dados de contato do seu entrevistador.
No caso infeliz em que você tinha um algoritmo em mente, mas não conseguiu escrever o programa, explique o seu procedimento de pensamento (algoritmo) para o seu entrevistador. Não é uma situação em preto e branco. Pensar em voz alta ou expressar suas idéias ao entrevistador pode dar a ele uma melhor compreensão de suas habilidades.
Como se preparar para o teste de codificação?
Muitos programadores experientes sugerem que praticar muitos problemas ajudará a desenvolver a intuição e fornecerá ferramentas para resolver novos problemas.. Muitos sites como HackerRank e LeetCode permitem que você pratique seu código e entenda como sua solução é otimizada..
Agora você sabe o que esperar dessa etapa do procedimento de contratação e alguns sites para ajudá-lo ao longo do caminho.. Apesar disto, Como esses problemas são resolvidos? Vou explicar a sequência de etapas a seguir que me ajudou pessoalmente.
É impossível se preparar para uma entrevista de codificação e não testar esta declaração de problema.
“Dado um número inteiro x, Retornar true e x é um palíndromo inteiro.“
Eu tive esse problema enquanto praticava para uma de minhas entrevistas de codificação usando LeetCode. aqui. Vou usar este problema para explicar as etapas.
Como eu queria me divertir enquanto programava, Eu decidi experimentar com listas. Não sei se este código foi escrito antes, Apesar disto, este foi meu esforço pessoal.
Depois de assistir a alguns vídeos e entender a abordagem que alguns codificadores usam para corrigir esses problemas de algoritmos, Consolidei as etapas a seguir para corrigir esse problema. As etapas mencionadas abaixo podem ser usadas para qualquer problema de algoritmo. O problema do palíndromo é usado apenas como um exemplo para mostrar as etapas para resolver qualquer problema de codificação.
1. Eu entendo a pergunta – O que é um palíndromo?
De acordo com Merriam-Webster, um palíndromo é estabelecido como segue:
uma palavra, verso ou frase (O que “Eu poderia estar lá antes de ver Elba”) ou um número (O que 1881) que lê o mesmo para trás ou para frente
Nós apenas consideramos números inteiros neste problema.
Exemplos: 12321, 22, 56877865
2. Quais são as limitações a considerar antes de começar a escrever o código?
As restrições aqui se referem às suposições que fazemos antes de escrever o código. Não verificaremos se essas condições foram atendidas. Presume-se que os argumentos passados para a função atendam às seguintes condições. As restrições variam com base nas declarações do problema. Eu reduzi as seguintes limitações para me concentrar no tópico principal da discussão: usando uma lista neste problema.
eu. Apenas números inteiros são passados como argumentos.
ii. Inteiros negativos não são considerados palíndromos.
3. Método de força bruta
A abordagem de força bruta é estabelecida no Merriam-Webster como-
confiar ou alcançar através da aplicação da força, esforço ou potência geralmente em grandes quantidades, em vez de métodos mais eficientes, cuidadosamente planejado ou direcionado com precisão
A abordagem de força bruta é geralmente a primeira abordagem que vem à mente ao lidar com qualquer problema de programação..
Aqui, a abordagem que considerei foi inverter o número inteiro e compará-lo com o número inteiro original.
#Abordagem de força bruta
def isPalindrome(x):
#Primeiro certifique-se de que o resultado seja falso quando o inteiro for negativo
se x<0:
retorna falso
#Inicializando a string invertida para 0
rev = 0
#Atribuindo x ao original, pois modificaremos x nas etapas abaixo
original = x
# Este loop while é usado para obter o reverso de um inteiro.
enquanto x>0:
# x (lembrete quando x é dividido por 10) dará o último dígito de x
rev = rev * 10 + x%10
#Remove the last digit from x to use if for the next step of the while loop
x = int(x / 10)
#Verifique se o inteiro invertido é igual ao inteiro original
se int(rev) == original:
retornar verdadeiro
outro:
retorna falso
O código pode ser explicado da seguinte maneira:
eu. Se o número inteiro for negativo, retorna falso.
II. Inicialize um inteiro (rev) uma 0. Está variávelEm estatística e matemática, uma "variável" é um símbolo que representa um valor que pode mudar ou variar. Existem diferentes tipos de variáveis, e qualitativo, que descrevem características não numéricas, e quantitativo, representando quantidades numéricas. Variáveis são fundamentais em experimentos e estudos, uma vez que permitem a análise de relações e padrões entre diferentes elementos, facilitando a compreensão de fenômenos complexos.... se utilizará para guardar el reverso del entero que se va a chequear.
III. Comece um loop while. No loop while, obtemos o reverso do inteiro original
4. Verifique se a lista criada na Etapa II e III é a mesma. Se então, o número é um palíndromo.
Este código é de complexidade temporal OU (log n).
4. A diversão começa aqui
A quarta etapa é a otimização. Apesar disto, Decidi usar listas para o mesmo e verificar seu resultado.
Meu código era o seguinte:
#Solução usando listas
def isPalindrome(x):
#Primeiro certifique-se de que o resultado seja falso quando o inteiro for negativo
se x<0:
retorna falso
#Converta o inteiro em uma lista : 123 torna-se [1, 2, 3]
lst_int = [int(num) para num em str(x)]
#Inverta a lista : [1,2,3] torna-se [3,2,1]
reverse_lst = lst_int[::-1]
#Verifique se a lista invertida é igual à lista original
if lst_int == reverse_lst:
retornar verdadeiro
outro:
retorna falso
O código pode ser explicado da seguinte maneira:
eu. Se o número inteiro for negativo, retorna falso
II. Converta o inteiro x em uma lista: 123 se converte em [1,2,3]
III. Inverta a lista: [1,2,3] se converte em [3,2,1]
4. Verifique se a lista criada na Etapa II e III é a mesma. Se então, o número é um palíndromo.
Pode parecer que poderíamos ter usado diretamente a função string no inteiro e inverter a string em vez de usar a lista. Apesar disto, se você vir a pergunta no LeetCode, dados: não armazene o inteiro como uma string. Daí a resposta.
Cada linha deste código é complexa OU (n). Adicionar várias declarações de complexidade OU (n) não aumenta a complexidade do algoritmo. Por isso, esta é a resposta OU (n).
Claramente, esta solução é pior do que o método de força bruta, que tem uma complexidade de O (log n). Esta etapa é a mais difícil por um motivo. Porque temos que pensar muito para ter certeza de não tornar as coisas piores do que já estão.. A etapa quatro é uma etapa iterativa que é repetida até que alguma melhoria seja observada na complexidade temporal ou espacial do código..
Visita aqui para assistir às discussões de outros programadores e se inspirar para aproveitar ao máximo o código acima
conclusão
Esta não é a resposta otimizada que você deve tentar em sua próxima entrevista.. É apenas um trampolim para lhe dizer como pensar. Eu sou um aprendiz como você e aprendo algo novo todos os dias. Ao mesmo tempo, Não quero esperar para me tornar um especialista para compartilhar o que aprendi.
Recomendo que você experimente todas as ideias que vierem à mente. Talvez você tenha a próxima grande ideia!!
Boa codificação!
A mídia mostrada nesta postagem não é propriedade da DataPeaker e é usada a critério do autor.



