题目
- 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];elseh=height[x];if(max<(h*(y-x)))max=h*(y-x);if(height[x]<height[y])x++;elsey--;}return max;}
};