LeetCode热题100精讲——Top5:盛最多水的容器【双指针】
|
文章目录
- 题目背景
- 盛水最多的容器
- C++解法
- Python解法

题目背景
如果大家对于 双指针 的概念并不熟悉, 可以先看我之前为此专门写的算法详解:
蓝桥杯算法竞赛系列第七章——六道力扣经典带你刷爆双指针
盛水最多的容器
题目链接: 盛水最多的容器
解题思路:
用 left 和 right 两个指针从两端向中心收缩,一边收缩一边计算 [left, right] 之间的矩形面积,取最大的面积值即是答案.
代码详解:
C++解法
class Solution {
public:
int maxArea(vector<int>& height)
{
// 定义双指针 - 前后指针
int left = 0, right = height.size() - 1;
int res = 0; // 记录结果
while(left < right)
{
// [left, right]之间的矩形面积
int cur_area = min(height[left], height[right]) * (right - left);
res = max(res, cur_area);
// 移动双指针 - 高度低的一端移动
if(height[left] < height[right])
left++;
else
right--;
}
return res;
}
};
Python解法
class Solution:
def maxArea(self, height: List[int]) -> int:
# 定义双指针 - 前后指针
left, right = 0, len(height) - 1
# 记录结果
res = 0
while left < right:
# [left, right] 之间的矩形面积
cur_area = min(height[left], height[right]) * (right - left)
res = max(res, cur_area)
# 移动双指针 - 移动较低的一端
if height[left] < height[right]:
left += 1
else:
right -= 1
return res
|
|