【LeetCode热题100】--11.盛最多水的容器

11.盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

**说明:**你不能倾斜容器。

【LeetCode热题100】--11.盛最多水的容器_第1张图片

class Solution {
    public int maxArea(int[] height) {
        int ans = 0;
        int l = 0, r = height.length -1;
        while(l < r){
            int area = Math.min(height[r],height[l]) * (r-l);
            ans = Math.max(ans,area);
            if(height[l] <= height[r])
            {
                l++;
            }else{
                r--;
            }
        }
        return ans;
    }
}

题目中的示例为:

[1, 8, 6, 2, 5, 4, 8, 3, 7]
^ ^
在初始时,左右指针分别指向数组的左右两端,它们可以容纳的水量为 m i n ( 1 , 7 ) ∗ 8 = 8 min(1,7)*8=8 min(1,7)8=8

此时我们需要移动一个指针。移动哪一个呢?直觉告诉我们,应该移动对应数字较小的那个指针(即此时的左指针)。这是因为,由于容纳的水量是由
两个指针指向的数字中较小值∗指针之间的距离决定的。如果我们移动数字较大的那个指针,那么前者「两个指针指向的数字中较小值」不会增加,后者「指针之间的距离」会减小,那么这个乘积会减小。因此,我们移动数字较大的那个指针是不合理的。因此,我们移动数字较小的那个指针。

你可能感兴趣的:(LeetCode,leetcode,算法)