leetcode 11. 盛最多水的容器
11. 盛最多水的容器

原来想得太复杂了。后来看了灵神 leetcode1.两数之和 leetcode15.三数之和 在b站上的讲解视频,就感觉有点启发,稀里糊涂就做出来了
class Solution {
public:
int maxArea(vector<int>& height) {
// 定义左右指针,分别指向数组的起始和末尾位置
int left = 0, right = height.size() - 1;
// 初始化最大面积为0
int res = 0;
// 当左指针小于右指针时,进入循环
while (left < right) {
// 计算当前左右指针所形成的矩形的面积,并与之前的最大面积进行比较,取较大值
// (right - left) 是底边长度,min(height[left], height[right]) 是高度(取决于较短的那条边)
res = max(res, (right - left) * min(height[left], height[right]));
// 如果左边的高度小于右边的高度,说明左边是限制盛水高度的瓶颈,
// 移动左指针,尝试寻找更高的左边高度,以增加可能的面积
if (height[left] < height[right]) ++left;
// 否则,右边是限制盛水高度的瓶颈,移动右指针,尝试寻找更高的右边高度
else --right;
}
// 返回计算出的最大面积
return res;
}
};
浙公网安备 33010602011771号