1.题目描述
给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
示例
输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。输入:height = [1,1] 输出:1
2.我的思路
头和尾都使用一个指针,开始时宽是最大的,然后找到两边对应的高较短的一个为高,算出体积与此时已保存的体积对比,此外,将较短的一边向中间移动,循环往复,直到两个指针相遇。
#我的代码
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
V=0
left=0
right=len(height)-1
while left!=right:
if height[left]<height[right]:
v=(right-left)*height[left]
left+=1
if v>V:
V=v
else:
v = (right - left) * height[right]
right-=1
if v>V:
V=v
#print(V)
return V
s=Solution()
height=[1,1]
s.maxArea(height)
3.其他做法
官方做法和我的一样,只不过是在比较时用了min和max函数
#官方题解
class Solution:
def maxArea(self, height: List[int]) -> int:
l, r = 0, len(height) - 1
ans = 0
while l < r:
area = min(height[l], height[r]) * (r - l)
ans = max(ans, area)
if height[l] <= height[r]:
l += 1
else:
r -= 1
return ans