一、题目
- 11. 盛最多水的容器 - 力扣(LeetCode)
给定一个长度为
n
的整数数组height
。有n
条垂线,第i
条线的两个端点是(i, 0)
和(i, height[i])
。找出其中的两条线,使得它们与
x
轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
说明:你不能倾斜容器。
二、思路
- 由题,这是一个求面积的题,面积是 height*width ,宽是左右数组下标相减,高就是左右两个挡板最短的那一块板的高度(水桶效应);
- 循环外维护一个面积变量用于存档当前最大面积,使用双指针从两边向中间逼近,每次移动短边(因为短边决定了承载量而不是长边),遍历一轮直到两指针相交;
- 最后返回维护的面积变量即可,见解法一;
三、解法
解法一
class Solution {
public int maxArea(int[] height) {
int len = height.length;
int left = 0, right = len - 1;
int maxArea = 0;
while (left < right) {
// 水桶效应
int he1ght = Math.min(height[left], height[right]);
// 宽度不变
int width = right - left;
maxArea = Math.max(maxArea, he1ght * width);
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return maxArea;
}
}