题目链接
采用暴力解法回超时,时间复杂度为O(N^2)
采用双指针的办法,注意,比较低的那条边决定着面积,因此,将比较低的那条边往中间挪动就好了,挪动的过程中,注意需要移动更大的,如果移动的不是更大的,那么不会得到更好的结果,直到相邻之后输出,而不是左边移动一次,右边移动一次,需要注意只有两个数的情况,在python里面,range(1,1)是没有结果的
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
i, j = 0, len(height) - 1
MaxArea = (j - i) * (min(height[i], height[j]))
while True:
print(i, j)
if height[i] <= height[j]:
for m in range(i, j):
if height[m] > height[i]:
i = m
break
if m == j - 1:
return MaxArea
else:
for n in range(j, i , -1):
if height[n] > height[j]:
j = n
break
if n == i + 1:
return MaxArea
Area = (j - i) * min(height[i], height[j])
if Area > MaxArea:
MaxArea = Area
height = [1,1]
print(Solution().maxArea(height))