利用双指针,不断更新面积
- 决定面积大小的因素:两个柱子(指针)之间的距离以及两柱子的最低高度。所以面积表示为
min(height[l],height[r])*(r-l)
- 如果低柱子不动,让高柱子的那一侧往里跳,
(r-l)
会变更小,min(height[l],height[r])
也不会变大,导致面积只会更小。因此不可以这样 - 如果高柱子不动,让低柱子的那一侧往里跳,虽然
(r-l)
会变更小,但min(height[l],height[r])
可能变大,导致面积可能变大。因此高柱子对应的指针不动,低柱子对应的指针向里测跳
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
area=0
l=0
r=len(height)-1
while l<r:
area=max(area,(r-l)*min(height[l],height[r]))
if height[l]>height[r]:
r-=1
else:
l+=1
return area
# so=Solution()
# print(so.maxArea([1,8,6,2,5,4,8,3,7]))
class Solution {
public:
int maxArea(vector<int>& height) {
int l=0;
int r=height.size()-1;
int area=0;
while (l<r){
area=max(area,min(height[l],height[r])*(r-l));
height[l]<height[r]? l++:r--;
}
return area;
}
};