难度:中等
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
【例】
输入: [1,8,6,2,5,4,8,3,7]
输出: 49
解释: 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
【解】双指针
class Solution {
public int maxArea(int[] height) {
int i = 0, j = height.length - 1, maxSize = (j - i) * Math.min(height[i], height[j]);
// 双指针,哪一侧的高度矮,就移动哪一侧,使面积尽可能大,是一种求局部最优的思想
while (i < j) {
if (height[i] > height[j]) {
j--;
} else {
i++;
}
maxSize = Math.max((j - i) * Math.min(height[i], height[j]), maxSize);
}
return maxSize;
}
}