题目
- 1. 题目解析
- 2. 讲解算法原理
- 3. 编写代码
1. 题目解析
题目地址:盛水最多的容器


2. 讲解算法原理

算法的主要思路是使用双指针的方法,通过不断调整指针的位置来计算面积,并更新最大面积。
具体步骤如下:
- 初始化左指针x为数组的起始位置,右指针y为数组的末尾位置。
- 2. 进入循环,判断左指针x是否小于右指针y,如果成立,则继续执行下面的步骤。
- 根据双指针指向的柱子的高度,选取较小的柱子高度作为当前的高度h。
- 计算当前两个柱子之间的面积,即h * (y - x)。
- 判断当前面积是否大于最大面积max,如果是,则更新max为当前面积。
- 6. 根据当前两个柱子的高度判断,如果左指针指向的柱子高度小于右指针指向的柱子高度,则将左指针向右移动一位(x++),否则将右指针向左移动一位(y–)。
- 重复步骤2至步骤6,直到左指针x不再小于右指针y。
- 返回最大面积max作为结果。
3. 编写代码
class Solution {
public:
    int maxArea(vector<int>& height) {
        //双指针
        int x=0,y=height.size()-1;
        int h=0;
        int max=0;
        while(x<y)
        {
            if(height[x]>height[y])
            h=height[y];
            else
            h=height[x];
            if(max<(h*(y-x)))
            max=h*(y-x);
            if(height[x]<height[y])
            x++;
            else
            y--;
        }
        return max;
    }       
};


















