暴力解:
两层for循环,挨个寻找面积最大的。时间复杂度O(n^2)
双指针
- 两边移动可想到双指针
- 面积受限于:1 左右的距离 2 最短边的高度
所以如果左右两边靠近,只可能是原来min(左,右)的一边移动,因为此时的max(左,右)对面积没有起到作用,再求前后面积的最大值。 - 相比暴力解,抛去了一些冗余。
class Solution:
def maxArea(self, height: List[int]) -> int:
l, r = 0, len(height) - 1
res = 0
while l < r:
area = min(height[l], height[r]) * (r - l)
res = max(area, res)
if height[l] <= height[r]:
l += 1
else:
r -= 1
return res
时间复杂度O(n)