尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LeetCode hot 100 — 11. 盛最多水的容器

LeetCode hot 100 — 11. 盛最多水的容器 给定一个长度为n的整数数组height。有n条垂线第i条线的两个端点是(i, 0)和(i, height[i])。找出其中的两条线使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明你不能倾斜容器。示例 1输入[1,8,6,2,5,4,8,3,7]输出49解释图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下容器能够容纳水表示为蓝色部分的最大值为 49。示例 2输入height [1,1]输出1提示n height.length2 n 1050 height[i] 104逻辑不难但写的时候就没有用到所谓的双指针概念写了一个双重循环果不其然超时了。# 自写第一版本代码 class Solution: def maxArea(self, height: List[int]) - int: n len(height) res -1 for i in range(0, n): for j in range(i 1, n): area min(height[i], height[j]) * (j - i) res max(res, area) return res结果是超出时间限制 55 / 65 个通过的测试用例感觉和上一个三数之和一样核心是如何剪枝优化直接去掉非必要的过滤class Solution: def maxArea(self, height: List[int]) - int: n len(height) res -1 left 0 right n -1 while left right: area min(height[left], height[right]) * (right - left) res max(area, res) # 到这里都和上一版本保持一致 # 注意一个点如果是从两端开始向中间移动的话此时保证了宽是递减的状态那么如果area想要增长高必须增大 ———————— 过滤条件出现 if height[left] height[right]: left 1 else: right - 1 # 确保min(height[left], height[right] 在增大) return res
返回列表