题目:
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
具体步骤为:1. 定义左右指针 left 和 right,初始指向数组两端;
2. 定义变量 ans 存储最大面积,cur_height 存储当前高度,cur_width 存储当前宽度;
3. 当左右指针未重合时,进行以下操作:
4. 如果左指针处的高度大于右指针处的高度,则:- cur_height = height[right] // 记录当前高度
- cur_width = right - left // 记录当前宽度
- right-- // 右指针左移
5. 否则:- cur_height = height[left] // 记录当前高度
- cur_width = right - left // 记录当前宽度
- left++ // 左指针右移
6. ans = max(ans, cur_width * cur_height) // 更新最大面积
7. 返回最大面积 ans
class Solution {
public:
int maxArea(vector<int>& height) {
// 定义左右指针left和right,初始化指向数组两端
int left=0,right=height.size()-1;
// 定义变量ans存储最大面积,cur_height存储当前高度,cur_width存储当前宽度
int ans=0,cur_height,cur_width;
// 左右指针未重合,继续搜索
while(left<right){
// 如果左指针处高度大于右指针处高度,移动右指针
if(height[left]>height[right]){
cur_height=height[right]; // 记录当前高度
cur_width=right-left; // 记录当前宽度
right--; // 右指针左移一位
}
// 否则移动左指针
else{
cur_height=height[left]; // 记录当前高度
cur_width=right-left; // 记录当前宽度
left++; // 左指针右移一位
}
// 更新最大面积ans
ans=max(ans,cur_width*cur_height);
}
// 返回最大面积ans
return ans;
}
};