11. 盛最多水的容器
2022-01-10 本文已影响0人
不死鸟F21
1.暴力解法,枚举所有可能,提交超时
class Solution:
def maxArea(self, height: list[int]) -> int:
max_area = 0
for i in range(len(height)):
for j in range(i+1,len(height)):
max_area = max(max_area, min(height[i], height[j])*(j-i))
print(max_area)
return max_area
'''
1.当前时间复杂度为O(n^2),需要根据题目减少一层循环
'''
2.双指针
class Solution:
def maxArea(self, height: list[int]) -> int:
max_area = 0
i = 0
j = len(height) -1
while(i<j):
if height[i] < height[j]:
# 此时左边的柱子比较短,移动右边的柱子不能使面积增大,只能移动左边的柱子
max_area = max(max_area, height[i]*(j-i))
i +=1
else:
max_area = max(max_area, height[j]*(j-i))
j -=1
max_area = max_area
return max_area
题目分析
1.如果左边柱子比较短,移动右边的长柱子不能使面积增大
2.如果右边柱子比较短,移动左边的柱子不能使面积增大