问题
给定 n
个非负整数 a1,a2,...,an
,每个数代表坐标中的一个点 (i, ai)
。画 n
条垂直线,使得垂直线 i
的两个端点分别为 (i, ai)
和 (i, 0)
。找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
注意:你不能倾斜容器,n
至少是2。
解答
容器可容纳的水是受短边影响,所以最多就是短边高乘上宽(x坐标上距离)。
这边采用的是双指针法,一个从左到右,另一个从右到左。123456789101112131415public class Solution { public int maxArea(int[] height) { int maxarea = 0; int N = height.length; int l = 0, r = N-1; while(l < r) { maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l)); if(height[l] < height[r]) l++; else r--; } return maxarea; }}
复杂度分析:
- 时间复杂度:$O(n)$
- 空间复杂度:$O(1)$