中等题 11. 盛最多水的容器
1.暴力解法,算法复杂度O(n²)
暴力解法即,使用两个循环,求每两个数之间的面积,再取这些面积中的最大值
class Solution:
def maxArea(self, height: List[int]) -> int:
area = []
for i in range(len(height)):
for j in range(i+1,len(height)):
if height[i]<height[j]:
area.append(height[i]*(j-i))
else:
area.append(height[j]*(j-i))
return max(area)
max_area = Solution()
a = [1,8,6,2,5,4,8,3,7]
max_area.maxArea(a)
测试结果正确,但是显示超出时间限制
2.双指针法,算法复杂度O(n)
双指针法是,i 指向的数组值要是小于j 指向的,那么保留大的边长,即j不动,i 向下一个移动,继续比较二者所指向的数组值,再保留大的边长,因为大的边长更容易得到大的面积
class Solution:
def maxArea(self, height: List[int]) -> int:
i=0
j=len(height)-1
max_area = 0
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
return max_area
测试结果正确,也没有超时