完整代码实现

class Solution {
    public int maxArea(int[] height) {
        List<Integer> result = new ArrayList<>();
        int left = 0;
        int right = height.length - 1;
        while(left < right){
            if(height[left] < height[right]){
                int area = height[left] * (right -left);
                left++;
                result.add(area);
            }else{
                int area = height[right] * (right -left);
                right--;
                result.add(area);
            }
        }
        int max = result.get(0);
        for(int i = 1;i<result.size();i++){
            if(result.get(i) > max){
                max = result.get(i);
            }
        }
        return max;
    }
}

优化后代码

class Solution {
    public int maxArea(int[] height) {
        int left = 0;
        int right = height.length - 1;
        int maxArea = 0; // 初始化最大容量为0
        
        while (left < right) {
            // 计算当前容量
            int currentArea = Math.min(height[left], height[right]) * (right - left);
            // 实时更新最大容量
            maxArea = Math.max(maxArea, currentArea);
            
            // 移动较短的边
            if (height[left] < height[right]) {
                left++;
            } else {
                right--;
            }
        }
        return maxArea;
    }
}

优化后的代码:降低了空间复杂度,可以在循环中记录最大面积

解题思路:

1.采用双指针法来解决这个问题:
 左指针left从数组起始位置开始
 右指针right从数组末尾位置开始
 通过比较两指针所指的高度,移动指针并计算当前容量
2. 代码具体实现步骤
1. 初始化:
 创建一个ArrayListresult来存储所有可能的容量值
 设置左指针left=0,右指针right=height.length-1
2. 双指针遍历:
 当left < right时循环:a. 如果左边高度小于右边高度:
 计算当前容量:area = height[left] * (right-left)
 将容量加入result列表
 左指针右移:left++b. 否则(右边高度小于等于左边高度):
 计算当前容量:area = height[right] * (right-left)
 将容量加入result列表
 右指针左移:right--
3. 寻找最大容量:
 初始化max为result的第一个元素
 遍历result列表,找到最大的容量值
4. 返回结果:
 返回找到的最大容量值max

更多推荐