
3种解法 - 计算盛最多水的容器
问题分析:每条垂直线的高度由给定的数组中的元素决定。容器的左右边界由两条垂直线构成,容器的高度是这两条线之间的较小高度,容积为两线之间距离与较小高度的乘积。 双指针法:从数组的两端开始,分别用左右两个指针向中间移动。每次移动较低的那一边的指针,以尽可能扩大容积。具体步骤如下:
发布日期:2021-05-08 16:54:36
浏览次数:23
分类:精选文章
本文共 1039 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到两条垂直线,使得它们与 x 轴共同构成的容器可以容纳最多的水。这个问题可以通过双指针法高效地解决,时间复杂度为 O(n),空间复杂度为 O(1)。
方法思路
- 初始化左指针
l
为 0,右指针r
为数组长度减 1。 - 比较左右两边的高度,决定哪边的高度较低,向较高的方向移动较低的指针。
- 计算当前容积并记录最大值,直到两个指针相遇。
解决代码
class Solution: def MaxArea(self, height): n = len(height) if n < 2: return 0 l, r = 0, n - 1 max_area = 0 while l < r: current_height = min(height[l], height[r]) current_width = r - l current_area = current_height * current_width if current_area > max_area: max_area = current_area if height[l] <= height[r]: r -= 1 else: l += 1 return max_area
代码解释
- 初始化:左指针
l
从 0 开始,右指针r
从数组末尾开始。 - 循环处理:在
l
小于r
时,计算当前两指针之间的高度和宽度,进而计算容积,更新最大容积。 - 指针移动:比较左右两边的高度,决定移动哪边的指针,以尽可能扩大容积。
- 终止条件:当
l
和r
相遇时,循环终止,返回最大容积。
这种方法确保了在 O(n) 时间内找到最大容积,适用于较大的数据规模。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月26日 10时57分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
LeetCode哈希表+字符类的题目总结
2025-04-05
LeetCode地平线专场——第308场周赛题解
2025-04-05
LeetCode数据库题目汇总二(附答案)
2025-04-05
LeetCode智加科技专场——第207场周赛题解
2025-04-05
LeetCode蔚来专场——第208场周赛题解
2025-04-05
leetcode题解-买卖股票的最佳时机
2025-04-05
leetcode题解102-二叉树的层序遍历
2025-04-05
leetcode题解102-翻转二叉树
2025-04-05
leetcode题解104- 二叉树的最大深度
2025-04-05
leetcode题解108-将有序数组转换为二叉排序树
2025-04-05
leetcode题解118-杨辉三角
2025-04-05
leetcode题解136-只出现一次的数字
2025-04-05
leetcode题解14-最长公共前缀
2025-04-05
leetcode题解167-两数之和 II - 输入有序数组
2025-04-05
leetcode题解173-二叉搜索树迭代器
2025-04-05
leetcode题解189-旋转数组
2025-04-05
leetcode题解191-位1的个数
2025-04-05
leetcode题解20-有效的括号
2025-04-05
leetcode题解200-岛屿数量
2025-04-05
leetcode题解206-反转链表
2025-04-05