题目:
leetcode11题目描述解法:
最开始采用两重for循环,遍历数组选出两个值,计算面积,但该方法超时,弃之。
我们定义两个指针l和r分别指向数组的左右两端。然后两个指针向中间搜索,每移动一次计算一次面积,并和当前的最大面积值作比较,直到两指针重合,结束搜索。
如何确定每次移动的是哪个指针?比较当前两指针对应的值,移动较小值的指针。举例来说,[1,8,6,2,5,4,8,3,7]最开始两指针指向1和7,1<7,所以向右移动数值1到8。因为如果移动大的数值7,接下来的面积只可能≤当前面积。而移动小的数值,接下来的面积可能比当前面积大。
具体代码如下:
class Solution:
def maxArea(self, height: List[int]) -> int:
l = 0
r = len(height)-1
res_area = 0
while l<r:
res_area = max((r-l)*min(height[l],height[r]),res_area)
if height[l]>height[r]:
r-=1
else:
l+=1
return res_area
网友评论