Devo admitir aqui que sou um daqueles que gosta de fazer perguntas sobre algoritmos em entrevistas, mas devo enfatizar que a resposta real à pergunta é absolutamente irrelevante. Não me importo nem um pouco se o entrevistado souber a resposta ou não. Em vez disso, para mim, esta pergunta visa aspectos diferentes, como os seguintes - em ordem de importância:
Exigências
Tais perguntas são deliberadamente subespecificadas. No seu exemplo, não há mais detalhes sobre a sequência. Se você tem um entrevistado que pergunta se esses números são realmente classificados, é um bom sinal. Ele tem a mentalidade correta para pedir aos clientes mais detalhes, que ajudarão a chegar a uma solução melhor em menos tempo. O candidato também pode brincar com a idéia de usar o espaço O (n) para armazenar uma matriz de N números, mas ele não deve fazer isso sem perguntar mais detalhes sobre X e Y. Digamos que X e Y estejam entre 1 e 1000 , então com certeza, vá em frente e inicie uma solução baseada em matriz. Mas se eu lhe disser que o intervalo é de 1 e 1 bilhão, então o problema se torna totalmente diferente. Deixe-me enfatizar novamente, que não me importo com a solução.
Técnicas padrão
Não quero contratar um programador que nem saiba o que significa O (n). É uma necessidade absoluta saber se você teve alguma educação decente nessa área. Mas também é importante não apenas saber o que isso significa, mas realmente aplicar esse conhecimento. No seu exemplo, quero que um candidato perceba que ele não tem permissão para classificar os dados (sem fazer mais perguntas visando a opção de uma classificação de bucket ou outras abordagens de classificação O (n)) devido à classificação necessária O (n log n) em geral.
Da mesma forma, outras perguntas sobre algoritmos têm como alvo técnicas padrão, como travessia em árvore ou gráfico ou recursão. Um candidato pode usar uma dessas técnicas, o que não causa uma boa impressão. Nesses casos, no entanto, eu gosto de ir mais fundo para descobrir se o candidato tem alguma experiência em CS. Obviamente, depende de qual é a posição de destino, mas geralmente um desenvolvedor que não conhece as complexidades do tempo de execução, nem as estruturas de dados típicas e seus percursos, não ajudará.
Mentalidade de solução de problemas
Depois de fazer a pergunta, você monitora o candidato de perto. Como ele reage? Você obtém os melhores resultados aqui de candidatos que não têm absolutamente nenhuma pista sobre como resolver o problema primeiro . A esse respeito, a pergunta verifica o que pode acontecer se uma situação semelhante ocorrer mais tarde no local de trabalho. Você pode encontrar esse problema durante o seu desenvolvimento e é bom saber como o candidato lida com esses problemas, mesmo que ele não consiga resolver tudo sozinho.
Exemplo: você não deseja que seu candidato entre no modo silencioso pela próxima meia hora! Verifique se ele consegue formular perguntas inteligentes (consulte Requisitos), verifique se ele começa a pensar fora da caixa quando perceber que não pode fazê-lo. Mesmo uma contra-pergunta "divertida" como uma "Posso usar a opção de telefone por colega de trabalho?" é um bom sinal.
Como responder
Em geral, as melhores respostas que você pode dar para esse tipo de pergunta são contra-perguntas! Dizer uma resposta imediatamente falha basicamente a coisa toda e, na verdade, não é uma boa resposta, porque todas essas perguntas sugerem trocas, o que sua resposta implica, sem que você tenha as informações necessárias ainda para fazer isso de maneira inteligente. troca. Obviamente, a qualidade das contra-perguntas varia entre os candidatos.
Como uma observação geral sobre as perguntas da entrevista: Contra-perguntas raramente são uma coisa ruim. Em uma de minhas próprias entrevistas, perguntaram-me, por exemplo, algo como o seguinte: "Se você tivesse que implementar o X, escolheria C ++ ou Java para isso, e por quê?" - Simplesmente respondi com "Estou limitado a esses dois?". Adivinhe você mesmo, que tipo de reação você recebe de um entrevistador por uma contra-pergunta - e quão fácil é realmente mostrar ao entrevistador do que você é capaz.
find the missing element in O(N) or better
O que significa "ou melhor" neste contexto? Parece o tipo de coisa que seria resolvida com um simples loop while, mas de qualquer maneira eu não entendo - está resolvido ou não , certo?