[Leetcode]Container With Most Water

来源:互联网 发布:淘宝买家信用等级v6 编辑:程序博客网 时间:2024/06/03 15:58

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container.

设两个指针p1, p2,从数组两端走~maxVal用以维护最大的容积,然后判断两个指针指向的高度哪个大,如果height[p1] > height[p2],那么把p1向中间移动肯定得不到更优的解,所以每次选较矮的一块往中间移~时间复杂度为O(N)

class Solution:    # @return an integer    def maxArea(self, height):        if height is None or len(height) == 0: return 0        p1, p2 = 0, len(height) - 1        maxVal = 0        while p1 < p2:            maxVal = max(min(height[p1], height[p2]) * (p2 - p1), maxVal)            if height[p1] > height[p2]:                p2 -= 1            else:                p1 += 1        return maxVal


0 0
原创粉丝点击