新手常犯错误,if a[i]>a[j] else... if a[i]>a[j] if a[i]<=a[j] leetcode 11 python

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

注意:你不能倾斜容器,n 至少是2。

首先这是一道动态规划的题目,其中最大容量取决于(两个点的坐标差)X(两个点中较小的那个点的高)

并实时更新最大容量,定两个指针,一个从前向后遍历,一个从后向前,并比较两个指针所指的值得大小,谁小谁移动。

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        p1=0
        p2=len(height)-1
        max_water=0
        while p1<p2:
            max_water=max(max_water,min(height[p1],height[p2])*(p2-p1))
            if height[p1]<height[p2]:
                p1+=1
            else:

#这里我曾写成了,if height[p1]>=height[p2]  结果肯定错了,因为一次循环中,p1 p2 先判断进行移动了一遍,第二个if 里面的p1 p2 已经变了,再进行一次比较。
                p2-=1
        return max_water

 

猜你喜欢

转载自www.cnblogs.com/ccgcy/p/9123398.html