我首先试图做的事情是搞清楚在给定的两个下标之间到底有多少水。这个过程跟微积分很像,所以我立即想起可以用极大值。实际上在上边的图片中,下标2以上的水是由周围的两个极大值下标1和6约束的。 我把我的想法说了出来:“如果我们找到所有的极大值,然后在他们之间填水。这样做有用么?” “恩,这样应该有用” Justin回复。 我去给这个解答写代码。然后Justin让我提供一套测试用例。我们讨论的所有测试用例似乎也挺好。 “你有问题问我吗?”Justin问我。“我做的怎么样?”“还算不错。你的方法用了两次遍历,但有一个更有意思的方法只用一次遍历。” 然后我们聊了一小会关于在twitter的生活。 我挂掉电话的那一秒我意识到了我的答案是错的。 想想这个输入: 我的答案计算的是极大值之间的水,就像这样。 但是答案应该是在两个高塔之间只有一池水: 第二天我把这个问题给我的技术支持看,他是理论计算科学的博士生。40分钟之后他还是卡在这个问题上。 今天早上我带着口臭和灵光一闪起床。答案是简单而漂亮的。 现在我扪心自问:在这件事我学到了什么?客观地说——不多。对于面试官没有问我正确的问题来引导我向正确的方向思考,我很难过。当我的解答实际上不正确的时候,我不知道为什么Justin告诉我“这应该有用”。我知道解答中的问题应该在他要求的测试用例中显示出来,但既然我在思考算法的时候没有考虑到,我就不可能想到要测试它。 我跟亚马逊签了合约明年夏天上班,并且对此我很兴奋。同时,我也禁不住问一句“如果我通过了面试会怎么样?” |