diff --git a/双指针/2. 盛最多水的容器.md b/双指针/2. 盛最多水的容器.md new file mode 100644 index 0000000..9d6b899 --- /dev/null +++ b/双指针/2. 盛最多水的容器.md @@ -0,0 +1,64 @@ +# 盛最多水的容器 + +## 题目 + +给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 + +找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 + +返回容器可以储存的最大水量。 + +说明:你不能倾斜容器。 + + + +示例 1: + + + +输入:[1,8,6,2,5,4,8,3,7] +输出:49 +解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 +示例 2: + +输入:height = [1,1] +输出:1 + +## 思路 + +- 决定因素 + - 最短的边 +- 操作 + - 判断最短的边 + - 移动最短的边 +- 临界条件 + - l < r +- 结果 + - 初始化 + - Max 判断 + +## 代码 + +```java +class Solution { + public int maxArea(int[] height) { + // Init + int ans = 0; + int l = 0, r = height.length - 1; + // Traverse + while (l < r) { + // Calc: length * height + int area = (r - l) * Math.min(height[r], height[l]); + // Ans + ans = Math.max(ans, area); + // Judge + if (height[l] < height[r]) { + l++; + } else { + r--; + } + } + return ans; + } +} +``` \ No newline at end of file