Skip to content

Latest commit

 

History

History
34 lines (23 loc) · 1.04 KB

11.Container-With-Most-Water.md

File metadata and controls

34 lines (23 loc) · 1.04 KB

思路(双指针解法)

矩形的面积与两个因素有关:

  1. 矩形的长度:两条垂直线的距离
  2. 矩形的宽度:两条垂直线中较短一条的长度

因此,要是矩形的面积最大,两条垂直线的距离越远越好,两条垂直线的最短长度越长越好。

设置两个指针==left==和==right==,分别指向数组的最左端和最右端。此时,两条垂直线的距离是最远的,若要下一个矩形面积比当前的面积更大,必须要把==height[left]==和==height[right]==中较短的垂直线向中间移动,寻找更长的垂直线。

代码

class Solution:
    def maxArea(self, height: List[int]) -> int:
        l, r, ans = 0, len(height) - 1, 0
        while l < r:
            if height[l] < height[r]:
                ans = max(ans, height[l] * (r - l))
                l += 1
            else:
                ans = max(ans, height[r] * (r - l))
                r -= 1
        return ans

复杂度分析

时间复杂度:O(n)

空间复杂度:O(1)