这道题比较简单,使用双指针。
要求的是最大面积,对于一个水桶(水杯来说),面积的算法是固定的,就是底乘以高。
在这个题中,我们把左边的位置设为left,右边的位置设为right,那么四边形的底就是(right-left)
高就是height[left]或者是height[right]。只需要用Math函数找出这两个数最小的一个值就可以了。
核心的部分:
对于上面两个图来说,哪个图的蓝色面积更大呢?上图宽一些,但是矮一些;下图窄一些,但是高一些。其实我们只需要判断left和right的高度,哪边高度更低,就把哪边向中间移动一次。
之后再跟原来的面积进行对比,如上面第一个图,右边right矮一些,就把right向左移动1,此时得到新的面积再跟原来的比较。一直到最后两个指针相遇,就能知道最大的面积是多少。
class Solution {
public int maxArea(int[] height) {
int left = 0;
int right = height.length - 1;
int ret = 0;
while(left < right) {
int v = Math.min(height[left],height[right]) * (right - left);
ret = Math.max(ret,v);
if(height[left] < height[right]){
left++;
}else{
right--;
}
}
return ret;
}
}