题意
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

question_11.jpg
解决方式
双指针
class Solution {
public int maxArea(int[] height) {
int ans = 0;
int left = 0;
int right = height.length-1;
while(left<right){
ans = Math.max(ans, Math.min(height[left],height[right])*(right-left));
// 每次缩小低的(反正需要缩小指针,优先缩小值小的)
if(height[left]<height[right]) left++;
else right--;
}
return ans;
}
}
上述方案原理
端点和
端点【左、右端点】能够容纳水的最大面积为:
。
假设我们移动较高端点【】为【
】,则新的能够容纳水的面积为:
。
我们已知:
因此需要判断当端点不变得情况下,
一直为
。
因此可以得出:
就能得出结论:移动大值也就是端点永远不会得到比当前值更大的值,因此这里需要移动小值也就是
端点,可能会变得更大。