个人技术分享

这道题比较简单,使用双指针。

要求的是最大面积,对于一个水桶(水杯来说),面积的算法是固定的,就是底乘以高。

在这个题中,我们把左边的位置设为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;
    }
}