题目描述:
给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:不能倾斜容器。
题解:
class Solution {
public:
int maxArea(vector<int>& height) {
int n=height.size();
if(n<2) return 0;
int left=0;
int right=n-1;
int area=0;
int ans=0;
while(right>left){
area=min(height[right],height[left])*(right-left);
ans=max(ans,area);
if(height[right]>height[left]) left++;
else right--;//出错点
}
return ans;
}
};
解题思路:
首先定义两个指针分别指向数组最左端和最右端,此时矩形的底边为right-left,高为两数组元素较小者,记录此时的面积(即底*高),移动指针(移动数组元素较小的下标指针),计算面积,维护最大值,直到right<=left结束。
出错点:
左边指针往右移,右边指针往左移。