1.暴力破解法(超出时间限制)
class Solution:
def maxArea(self, height: List[int]) -> int:
s = 0
for i in range(len(height) - 1):
for j in range(i, len(height)):
if height[i] > height[j]:
heigh = height[j]
else:
heigh = height[i]
_s = (j - i) * heigh
if _s > s:
s = _s
return s
2. 双指针法
最初我们考虑由最外围两条线段构成的区域。现在,为了使面积最大化,我们需要考虑更长的两条线段之间的区域。如果我们试图将指向较长线段的指针向内侧移动,矩形区域的面积将受限于较短的线段而不会获得任何增加。但是,在同样的条件下,移动指向较短线段的指针尽管造成了矩形宽度的减小,但却可能会有助于面积的增大。因为移动较短线段的指针会得到一条相对较长的线段,这可以克服由宽度减小而引起的面积减小。
class Solution:
def maxArea(self, height) -> int:
if height[0] < height[len(height) - 1]:
high = height[0]
i = 1
j = len(height) - 1
else:
high = height[(len(height) - 1)]
i = 0
j = len(height) - 2
s = high * (len(height) - 1)
while i < j:
if height[i] < height[j]:
_s = height[i] * (j - i)
if _s > s:
s = _s
i += 1
elif height[i] == height[j]:
_s = height[i] * (j - i)
if _s > s:
s = _s
if height[i + 1] < height[j]:
i += 1
elif height[j - 1] < height[i]:
j -= 1
elif height[i+1] > height[j - 1]:
i += 1
else:
_s = height[j] * (j - i)
if _s > s:
s = _s
j -= 1
return s
网友评论