题目:
给定一个长度为
n
的整数数组height
。有n
条垂线,第i
条线的两个端点是(i, 0)
和(i, height[i])
。找出其中的两条线,使得它们与
x
轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
思路: 定义两个指针分别指向两块板子 s = min(h[i],h[j]) * (j - i) 针对短板:由于min取决于短板长度,所以向内移动短板,min有可能增大,s = min * (j-i-1) 有可能增大 针对长板:由于min取决于短板长度,所以向内移动长板的话,min只会减小或者不变,s = min * (j-i-1) 所以一定减小。 所以只需要一直将两块板子中的短板向内移动,直到相遇,所记录最大值即为水池最大面积
代码:
class Solution {
public int maxArea(int[] height) {
int max = 0;
// s = min(h[i],h[j]) * (j - i)
int left = 0;int right = height.length - 1;
while (left < right){
max = Math.max(max,Math.min(height[left],height[right]) * (right - left);)
if (height[left] < height[right]){
left++;
}else {
right--;
}
}
return max;
}
}