Gibt es eine Regel, die besagt, dass Sie nach 20 Minuten mit dem Codieren beginnen sollten, egal was passiert?
Nein, aber wenn Sie 20 Minuten damit verbringen, das Problem zu analysieren, bevor Sie sich an die Arbeit machen, stecken Sie wahrscheinlich bereits in Schwierigkeiten. Ein Arbeitgeber, der Ihnen eine Frage stellt, wie Sie sie zitiert haben, ist hauptsächlich daran interessiert, wie Sie sich einem Problem nähern. Wenn er sie jedoch als Codierungsproblem fragt, möchte er auch Code sehen. Sprechen Sie sie durch Ihren Denkprozess ...
Nun, der offensichtliche Ansatz ist hier rohe Gewalt. Wenn ich in Anbetracht der drei Eckpunkte ein rechtwinkliges Dreieck erkennen könnte, könnte ich alle Kombinationen aus zwei Punkten und dem Ursprung durchlaufen, um nach rechtwinkligen Dreiecken zu suchen. Das sollte nicht schwer sein - ich kann eine Funktion schreiben, die den Satz von Pythagoras verwendet, um rechtwinklige Dreiecke zu identifizieren. Um dies zu vereinfachen, schreibe ich auch eine Funktion, die den Abstand zwischen zwei Punkten mithilfe der Abstandsformel bestimmt ...
Das Schreiben dieser Funktionen sollte ungefähr drei Minuten dauern. Nach wenigen Minuten haben Sie bereits gezeigt, dass Sie sich an die grundlegende Geometrie erinnern und wirklich wissen, wie man Code schreibt. Es gibt Ihnen auch etwas zu besprechen:
Wir könnten also die isRightTriangle(p1, p2, p3)
Funktion offensichtlich in die Mitte von vier for
Schleifen setzen und alle möglichen Auswahlen für jeden der beiden variablen Punkte durchlaufen. Mal sehen ... das Problem fragt nach der Anzahl der rechtwinkligen Dreiecke, einschließlich des Ursprungs in einem 50x50-Raster. Wenn wir also die Brute-Force-Methode verwenden, überprüfen wir 50 Möglichkeiten für jede Koordinate jedes Punkts. Das sind 50 ^ 4 Schecks ... Ich bin sicher, wir können es besser machen, aber der Code ist offensichtlich, also lass mich das aufschreiben ...
Nun schreiben Sie eine Funktion, die verschachtelte for
Schleifen verwendet, und die isRightTriangle()
Funktion, die Sie gerade geschrieben haben. Sie haben das Problem gelöst, aber Sie haben auch den Interviewer sehen lassen, wohin Sie gehen. Wenn ihr Ziel nur darin bestand, zu sehen, dass Sie Code schreiben können, werden Sie möglicherweise aufgefordert, damit aufzuhören. Wahrscheinlich sind sie froh, mit jemandem zu sprechen, der weiß, was sie tun, und sie werden sehen wollen, wie weit Sie damit kommen. Also mach weiter ...
Mir ist beim Schreiben eingefallen, dass wir die Symmetrie ausnutzen können. Wir können ein beliebiges rechtwinkliges Dreieck um die 45 ° -Linie spiegeln. Wenn wir also einen der Punkte nur auf einer Seite dieser Linie markieren, können wir alle rechtwinkligen Dreiecke, die wir finden, einfach zweimal zählen ... einmal für das Dreieck und einmal für sein Spiegelbild. Das halbiert die Anzahl der Schecks. Wenn wir es uns jetzt ansehen, nehmen wir eine Quadratwurzel, um den Abstand zwischen zwei Punkten zu finden, aber dann quadrieren wir das einfach noch einmal in isRightTriangle()
...
Und so weiter. Auch hier wollen sie normalerweise keine perfekte Lösung sehen, sie wollen sehen, wie man zu einer Lösung kommt. Ihr Denkprozess muss nicht so sein wie oben - nur das Selbstvertrauen, laut zu denken, wird eine Menge ausmachen. Schwitzen Sie nicht, wenn Sie einen Fehler machen - sagen Sie einfach "hmmm, ich glaube, ich bin hier von den Schienen geraten - lassen Sie mich einen Schritt zurückgehen ..."