你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

LeetCode贪心专题

2021-11-18 18:19:20

1 盛最多水的容器

1.1 题目描述

给 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

1.2 解法

1.2.1 枚举(计算量呈阶乘式增长)

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        self.height = height
        best_pro = 0
        for i in range(len(height)-1):
            for j in range(i,len(height)):
                if height[i]>=height[j]:
                    pro = height[j]*(j-i)
                else:
                    pro = height[i]*(j-i)
                if best_pro<pro:
                    best_pro = pro
        
        return best_pro

1.2.2 双指针(计算量较小)

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        self.height = height
        iright = len(height)-1
        ileft = 0
        pro_list = []
        while True:
            if height[iright]>=height[ileft]:
                pro = height[ileft]*(iright-ileft)
                pro_list.append(pro)
                ileft += 1
            else:
                pro = height[iright]*(iright-ileft)
                pro_list.append(pro)
                iright -= 1
            if ileft == iright:
                break
        return max(pro_list)

2 待续…

题目来源:LeetCode官网