题目:

解析:

       使用双指针的思想分别从左右两端(left=0,right=height.length-1)向内遍历数组,容积的大小很容易能得出为Math.max(height[left],height[right]) *(right-left),紧接着判断left和right下标对应数组值的大小决定指针移动方向(由于指针向内移动,因此在高不变的情况下,体积在移动过程中只会越来越小,因此要让高小的一侧移动:即判断出小的一侧后不需要再计算以这一侧为高的所有体积),将所有的体积全部求出后找到最大值即可。

代码:

class Solution {
    public int maxArea(int[] height) {
        int left = 0, 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;
    }
}

更多推荐