给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
示例 1:
输入:[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 max=0;
int cur=0;
int left=0;
int right=height.length-1;
while(left<right){
cur=(right-left)*(Math.min(height[right],height[left]));
max=Math.max(max,cur);
/*选择高较小的指针进行移动,保留容器较高的那条边,
放弃较小的边,以获得有更高的边的机会。*/
if(height[left]>height[right]) right--;
else left++;
}
return max;
}
}