美文网首页
11. 盛最多水的容器

11. 盛最多水的容器

作者: 不死鸟F21 | 来源:发表于2022-01-10 17:46 被阅读0次

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.如果右边柱子比较短,移动左边的柱子不能使面积增大

相关文章

网友评论

      本文标题:11. 盛最多水的容器

      本文链接:https://www.haomeiwen.com/subject/cmvmcrtx.html