1 solutions

  • 0
    @ 2025-6-7 20:15:40

    思路

    快慢指针的方法+贪心的思路

    解题过程

    容器装的水多意味着就是要宽和高都要尽可能大,所以要选择一个出发点: 宽用横坐标之差来表示,高则用两个height[]中小的一个表示。显然,宽是容易计算的,所以选择宽为出发点; 设slow为0,fast为height.length - 1,这就保证宽是最大的,然后计算当前的面积; 如果当前面积大于max,则max设置为当前面积; 站在贪心的角度,我就认为容器的两条边中,短边就是影响容量的一条边,所以接下来找height[slow] 和height[fast]中的小的那个; 然后移动快慢指针,继续计算容器容量,直到slow = fast 为止。

    复杂度

    时间复杂度: O(∗) 空间复杂度: O(∗)

    int maxArea(int[] height) {
            int max = 0;
            int slow = 0;
            int fast = height.length - 1;
            while(slow != fast){
                int area = (fast - slow) * min(height[slow], height[fast]);
                if(area > max){
                    max = area;
                }
                if(height[slow] < height[fast]){
                    slow ++;
                }
                else {
                    fast --;
                }
            }
            return max;
        }
    
    

    Information

    ID
    21
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    6
    Tags
    # Submissions
    6
    Accepted
    2
    Uploaded By