盛最多水的容器
一、题目描述
题目: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
要求: 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水,并返回容器可以储存的最大水量。
示例:

二、题解
思路:
-
左右指针指向数组两端,计算当前面积 = 短边高度 × 宽度,更新最大值。
-
每次移动较短的那一侧指针 (因为长边移动只会让面积变小)。
-
重复直到两指针相遇,返回最大值。
代码:
class Solution {
public int maxArea(int[] height) {
int left = 0;
int right = height.length - 1;
int maxArea = 0;
while(left < right){
int minHeight = Math.min(height[left],height[right]);//取较小高度
int Area = minHeight * (right - left);//计算面积
maxArea = Math.max(Area,maxArea);
//移动较矮的一侧
if(height[left] < height[right]){
left++;
}else{
right--;
}
}
return maxArea;
}
}
三、相关代码方法
Math.min(int a, int b):返回两个整数中的较小值
Math.max(int a, int b):返回两个整数中的较大值