题目![在这里插入图片描述](https://img-blog.csdnimg.cn/0aefcad9967c42dc9c0891b1d0890c80.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjM3OTU2MQ==,size_16,color_FFFFFF,t_70)
思路
定义一个left指针和一个right指针,分别指向数组的第0个元素和最后一个元素,此时right - left就是容器的长。
此时我们有了容器的长,如果想让容器的面积更大,则选取的高应该也要尽量更大。left和right指针指向的数组元素就是容器的高。如果left指向的数组元素小于right指向的数组元素,则代表此时right当作容器的高所求出来的面积比left当作容器的高所求出的面积大,则保留right,将left + 1,反之则right - 1。即每次循环都比较left和right的大小,保留较大的一边当作其中一条高,使每次循环的面积尽可能大。最后保留最大的面积即可。
代码
public int maxArea(int[] height) {
int left = 0; //左指针
int maxarea = 0; //存放最大面积
int right = height.length - 1; //右指针
while(left < right) {
//当前容器面积取决于较小的高 * 容器长
maxarea = Math.max((right - left) * Math.min(height[left],height[right]),maxarea);
if(height[left] > height[right]) {
right--;
}
else {
left++;
}
}
return maxarea;
}