Y a-t-il une règle comme après 20 minutes, vous devriez juste commencer à coder quoi qu'il arrive?
Non, mais si vous passez 20 minutes à analyser le problème avant de vous lancer dans les affaires, vous avez probablement déjà des ennuis. Un employeur qui vous pose une question comme celle que vous avez citée est principalement intéressé par la façon dont vous abordez un problème, mais s'il le pose comme un problème de codage, il voudra également voir du code. Parlez-leur de votre processus de réflexion ...
Eh bien, l'approche évidente ici est la force brute. Si j'avais un moyen de reconnaître un triangle rectangle étant donné les trois sommets, je pourrais parcourir toutes les combinaisons de deux points et l'origine à la recherche de triangles rectangles. Cela ne devrait pas être difficile - je peux écrire une fonction qui utilise le théorème de Pythagore pour identifier les triangles rectangles. Pour faciliter cela, je vais également écrire une fonction qui détermine la distance entre deux points en utilisant la formule de distance ...
L'écriture de ces fonctions devrait prendre environ trois minutes. Maintenant, après quelques minutes seulement, vous avez déjà montré que vous vous souvenez de la géométrie de base et que vous savez vraiment comment écrire du code. Cela vous donne également de quoi parler:
Ainsi, nous pourrions évidemment mettre la isRightTriangle(p1, p2, p3)
fonction au milieu de quatre for
boucles et parcourir tous les choix possibles pour chacun des deux points variables. Voyons voir ... le problème demande le nombre de triangles rectangles incluant l'origine sur une grille 50x50, donc l'utilisation de la méthode de la force brute nous fait vérifier 50 possibilités pour chaque coordonnée de chaque point. C'est 50 ^ 4 contrôles ... Je suis sûr que nous pouvons faire mieux, mais le code est évident, alors laissez-moi l'écrire ...
Alors maintenant, vous écrivez une fonction qui utilise des for
boucles imbriquées et la isRightTriangle()
fonction que vous venez d'écrire. Vous avez résolu le problème, mais vous avez également laissé l'intervieweur voir où vous allez. Si leur objectif était simplement de voir que vous pouvez écrire du code, ils pourraient vous dire d'arrêter. Plus probablement, ils sont heureux de parler à quelqu'un qui sait ce qu'ils font et ils voudront voir jusqu'où vous allez. Alors vous continuez ...
Il m'est venu à l'esprit pendant que j'écrivais que nous pouvons profiter de la symétrie. Nous pouvons refléter n'importe quel triangle rectangle donné autour de la ligne de 45 °, donc si nous choisissons de vérifier l'un des points uniquement d'un côté de cette ligne, nous pouvons simplement compter les triangles rectangles que nous trouvons deux fois ... une fois pour le triangle et une fois pour sa réflexion. Cela réduit de moitié le nombre de contrôles. De plus, en le regardant maintenant, nous prenons une racine carrée pour trouver la distance entre deux points, mais ensuite nous la remettons au carré dans isRightTriangle()
...
Etc. Encore une fois, ils ne veulent généralement pas voir une solution parfaite, ils veulent voir comment vous obtenez une solution. Votre processus de réflexion ne doit pas nécessairement ressembler à celui ci-dessus - le simple fait d'avoir la confiance nécessaire pour penser à haute voix comptera beaucoup. Ne vous inquiétez pas si vous faites une erreur - dites simplement "hmmm, je pense que j'ai déraillé ici - laissez-moi revenir en arrière ..."