java版——双指针
容量是由最小的那个边决定的,即

area = min(height[legt], height[right]) * (right - left)

然后我们每次移动较小的边,比如, height[left] < height[right] ,那我们就让 left++
为什么呢? 因为如果我们移动较大的边,那么移动后得到的容量一定会比现在小。即使较大边移动后遇到更大的边,但是容量是由较小边决定的,即容器的高度还是 height[left] ,但是宽度却变小了。所以移动较大边必不可能得到一个更大的容器,而移动较小边是有可能得到一个更大的容器的。



public class Solution {

    public int maxArea (int[] height) {
        int left = 0;
        int right = height.length - 1;
        int maxVal = 0;
        while(left < right){
            int area = Math.min(height[left], height[right]) * (right - left);
            maxVal = Math.max(maxVal, area);
            if(height[left] < height[right]){
                left++;
            }else{
                right--;
            }
        }
        return maxVal;
    }
}