只记录思路,
给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
思路: 双指针
左右指针分别指向数组的左右两端,它们可以容纳的水量为 min(1,7)∗8=8\min(1, 7) * 8 = 8min(1,7)∗8=8
重点:
如果我们移动数字较大的那个指针,那么前者「两个指针指向的数字中较小值」不会增加,后者「指针之间的距离」会减小,那么这个乘积会减小。因此,我们移动数字较大的那个指针是不合理的。因此,我们移动 数字较小的那个指针。
public int maxArea(int[] height) {
int n = height.length;
int max = 0;
int left=0,right =n-1;
while (left<right){
int newmax = Math.min(height[left], height[right]) * (right - left);
max =Math.max(max,newmax);
if (height[left]<=height[right]){
left++;
}else {
right++;
}
}
return max;
}