LeetCode 011 Container With Most Water *

来源:互联网 发布:淘宝加盟的骗局揭秘 编辑:程序博客网 时间:2024/04/30 21:28

题目:在平面直角坐标系上,给出(i,0)-(i,a_i)一系列线段,问哪两个线段和x轴组合起来产生的容器能装最多的水。

看到题目首先要问,在这个平面中的重力是什么方向的?能否倾斜容器?因为抛开重力方向谈装水都是耍流氓。题目中告诉我们,不可以倾斜容器,重力向下。那么根据木桶原理,能装水的区域取决于短的那根线段,即

area=min(height[i], height[j]) * (j - i) 假设j>i

最暴力的想法就是枚举i和j了,时间复杂度O(n^2)。这样显然会超时,所以要想更快的办法。我们可以用的是O(n)的扫描法。令i从0开始,j从n-1开始,i和j往中间移动。那么每次移动i还是j呢?我们移动height[i]和height[j]最小的那个,因为j-i减小了,要使area最大,保留长的线段更有潜力。

但是我没有想到数学上严谨的证明方法。为什么保留长的线段就是对的?说长的有潜力肯定不是很严谨。先打个*,以后注意。

0 0