矩形的面积与两个因素有关:
- 矩形的长度:两条垂直线的距离
- 矩形的宽度:两条垂直线中较短一条的长度
因此,要是矩形的面积最大,两条垂直线的距离越远越好,两条垂直线的最短长度越长越好。
设置两个指针==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)