题目
- 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;
}
};