穷举法 时间复杂度O(N^2)
然而此方法会超时。。
class Solution:
def maxArea(self, height: List[int]) -> int:
max_area = 0
for i in range(0, len(height) - 1):
for j in range(i + 1, len(height)):
max_area = max(max_area, (j - i) * min(height[i], height[j]))
return max_area
双指针 左右夹逼 时间复杂度O(N)
class Solution:
def maxArea(self, height: List[int]) -> int:
l, r = 0, len(height) - 1
max_area = 0
# 全局最大高度
max_h = max(height)
while l < r:
# 两边夹逼 宽度越来越小
# 如果配合全局最大的高度都无法超过 当前的最大结果,则再往内也不会有更大的了
if max_h * (r - l) < max_area:
break
max_area = max(max_area, (r - l) * min(height[r], height[l]))
if height[l] < height[r]:
l += 1
else:
r -= 1
return max_area