LeetCode-11、盛最多水的容器-中等
示例:
输入: [1,8,6,2,5,4,8,3,7] 输出: 49
代码1:暴力法
class Solution:
def maxArea(self, height):
area = 0
if len(height) < 2:
return area
for i in range(len(height)):
length = len(height[i:]) - 1
ii = i + 1
while length > 0:
area = max(area, (ii-i) * min(height[i], height[ii]))
ii += 1
length -= 1
return area
考虑所有可能的组合,找出最大值,数值过多时超出时间限制。
代码2:双指针
class Solution:
def maxArea(self, height: List[int]) -> int:
area = 0
if len(height) < 2:
return area
start = 0
end = len(height) - 1
while start < end:
area = max(area, (end-start)*min(height[start], height[end]))
if height[start] <= height[end]:
start += 1
else:
end -= 1
return area