This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

双指针

1 - 11. 盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。

题意:

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

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

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

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

难度:

中等

示例:

image.png

解析:

11.drawio.png

流程如上, 核心算法是 贪心 配合双指针找到最大面积并不断更新 贪心的判断是较大的长度为边界, 不断迭代小的边界来贪心寻找最大面积 最后返回

class Solution {

    public int maxArea(int[] height) {

        //初始化指针

        int left = 0;

        int right = height.length - 1;

        //面积

        int maxSize = 0;

        while(left < right){

           maxSize =  Math.max(maxSize, Math.min(height[left], height[right]) * (right - left));

            // 移动指针

            if (height[left] <= height[right]) {

                left++;  // 增大左边的指针

            } else {

                right--; // 减小右边的指针

            }

        }

        return maxSize;

    }

}