题目大意
https://leetcode.com/problems/container-with-most-water/
横坐标由0到n-1,纵坐标是高度,问哪两个高度之间再算上它们x轴之间的距离乘积最大,也就是能放更多的水。
题目分析
朴素的思想是O(n^2)暴力枚举,但这样显然不是这题考察的意图,正确的一个解法是,利用双指针,左指针最开始在0的位置,右指针最开始在n-1位置上,如果左指针比右指针的高度小,那么左指针右移,反之,右指针左移,直至两个指针重合,期间始终更新面积,最后所得即为最大面积。
这种思想的正确性:例如当左指针0的高度小于右指针n-1的高度时,左指针右移一个的代价是:0~n-2,0~n-3…..0~1的面积都没有计算过,但这些面积显然小于0~n-1的面积,因此算法是正确的。
代码
|
|
算法复杂度:O(n)