11. 盛最多水的容器
image.png
思路
这题有点像接雨水,但是比接雨水简单的是,这个中间是没有木棍的,所以很容易计算出2根棍子能装多少水。 根据木桶效应,容器装水多少是根据最短那块来决定的。 本题用双指针的方式,首先比较两侧木板较短的那块板子,记录下值,如果右侧小则右侧的指针移动,为啥呢,因为右侧可能会有更高的板子出现。如果这时候右侧的更低了呢?没关系,我们记录了每一次的最大值。
class Solution: def maxArea(self, height: List[int]) -> int: i, j = 0, len(height)-1 max_value = 0 while i < j: # 最大值等于 (j-i) * 短板的高度 与 目前的最大值的比较 max_value = max(max_value, min(height[i], height[j]) * (j-i)) if height[i] < height[j]: i += 1 else: j -= 1 return max_value
感觉max和min耗时很久,改造了一下:
class Solution: def maxArea(self, height: List[int]) -> int: i, j = 0, len(height)-1 max_value = 0 while i < j: now_value = height[j] * (j-i) if height[j] < height[i] else height[i] * (j-i) if now_value > max_value: max_value = now_value if height[i] < height[j]: i += 1 else: j -= 1 return max_value
image.png