题目:盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
思路:使用两个指针分别指向 l:height[0]与 r: height[length - 1],相向移动,比较l与r指向的值的大小,两个的较大值 *(r-l),并记录,如果l指向的值小于r指向的值,则指针l向右移动,反之,r向左移动,重复以上操作直至l<r.
public int maxArea(int[] height) {
int l = 0, r = height.length - 1;
int res = 0;
while (l < r) {
int cur = Math.min(height[l], height[r]);
int area = cur * (r - l);
res = Math.max(res, area);
if (height[l] < height[r]) {
l++;
} else {
r--;
}
}
return res;
}