![](https://csdnimg.cn/release/download_crawler_static/88974198/bg1.jpg)
解题思路:
使用双指针法,初始化左指针和右指针分别指向数组的第一个元素和最后一个元素。计算当
前指针对应的容器的面积,并与之前计算的最大面积进行比较,取较大的值作为最大面积。
然后根据指针对应位置的高度大小,移动指针。移动规则是将高度较小的指针向内移动,这
样才有可能获得更大的面积。
具体实现步骤如下:
1. 初始化左指针 left=0,右指针 right=height.length-1,初始化最大面积 maxArea=0。
2. 当 left<right 时,执行以下步骤:
- 计算当前指针对应的容器的面积,即 area=min(height[left], height[right])*(right-left)。
- 将当前面积与最大面积 maxArea 进行比较,取较大的值作为新的最大面积 maxArea。
- 判断左指针对应的高度和右指针对应的高度的大小,如果左指针对应的高度小于右指
针对应的高度,则将左指针向右移动一位,否则将右指针向左移动一位。
3. 返回最大面积 maxArea。
时间复杂度分析:
双指针法只需要遍历一次数组,所以时间复杂度为 O(n)。
空间复杂度分析:
双指针法只需要用到常数个额外的变量,所以空间复杂度为 O(1)。
Java 代码实现如下:
```java
public class MaxAreaOfContainer {
public int maxArea(int[] height) {
int left = 0;
int right = height.length - 1;
int maxArea = 0;
while (left < right) {
int area = Math.min(height[left], height[right]) * (right - left);
maxArea = Math.max(maxArea, area);
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return maxArea;
}
public static void main(String[] args) {