是否有类似20分钟后的规则,无论如何都应该开始编码?
不,但是如果您在开始工作之前花20分钟分析问题,则可能已经遇到麻烦了。像您引用的问题一样询问您的雇主最感兴趣的是您如何解决问题,但是如果他们将其作为编码问题来询问,他们也会希望看到一些代码。在您的思考过程中与他们交谈...
好吧,这里显而易见的方法是蛮力。如果我有办法在给定三个顶点的情况下识别直角三角形,则可以遍历两个点的所有组合以及寻找直角三角形的原点。那不应该很难-我可以编写一个使用勾股定理来识别直角三角形的函数。为了简化操作,我还将编写一个函数,该函数使用距离公式来确定两点之间的距离...
编写这些功能大约需要三分钟。现在,仅需几分钟,您就可以证明自己记得基本的几何图形,并且确实知道如何编写代码。它还给您一些话题:
因此,我们显然可以将isRightTriangle(p1, p2, p3)
函数放在四个for
循环的中间,并对两个变量点中的每一个的所有可能选择进行迭代。让我们看看...问题要求的直角三角形数量包括50x50网格上的原点,因此使用蛮力方法使我们可以检查每个点的每个坐标的50种可能性。那是50 ^ 4个检查...我确定我们可以做得更好,但是代码很明显,所以让我写下来...
因此,现在您编写一个使用嵌套for
循环的isRightTriangle()
函数以及您刚编写的函数。您已经解决了问题,但同时也让面试官了解您的去向。如果他们的目标只是希望您可以编写代码,那么他们可能会告诉您停止。他们很可能会与知道自己在做什么的人交谈,并且很想知道您能走多远。所以你继续...
在我写作时,我想到我们可以利用对称性。我们可以在45°线周围反映任何给定的直角三角形,因此,如果我们选择仅检查该线的一侧上的点之一,我们就可以算出我们发现两次的任何直角三角形……一次是三角形,一次是对于它的反思。这样可以将支票数量减少一半。另外,现在看,我们要求平方根以找出两点之间的距离,但然后再次将其平方成isRightTriangle()
...
等等。同样,他们通常不希望看到理想的解决方案,而是希望了解如何获得解决方案。您的思维过程不必像上面的那样-只是有信心大声思考将非常重要。如果您犯了一个错误,请不要流汗-只是说:“嗯,我想我已经离开这里了-让我后退一步……”