只记录思路,

给定一个长度为 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;
        
    }
12-12 23:16