这个题目是给一个数组,每个的值是记录该位置的高度,求能盛水的最大面积。
这个题目可以用暴力法做:
class Solution {
public:
int maxArea(vector<int>& height) {
int a=height.size()*(height.size()+1)/2;
int area=0;
for(int i=0;i<height.size();i++){
for(int j=i+1;j<height.size();j++){
int h;
if(height[i]<height[j]){
h=height[i];
}
else{
h=height[j];
}
if(h*(j-i)>area){
area=h*(j-i);
}
}
}
return area;
}
};
这个方法效率不高,可以用双指针的方法做,向内移动短板。
原因是:
如果向内移动短板,容器底边宽度减一,容器的短板可能变大,面积可能变大;
如果向内移动长板,容器的底边宽度还是减一,但是短板不变或者变小,面积一定会减小
class Solution {
public:
int maxArea(vector<int>& height) {
int l=0;
int r=height.size()-1;
int area=0;
int temp=0;
while(l<r){
area=min(height[l],height[r])*(r-l);
if(height[l]<height[r]){
l++;
}else{
r--;
}
temp=max(area,temp);
}
return temp;
}
};