思路:最容易想到的办法就是暴力枚举所有可能的情况,找到最大体积即可
class Solution {
public:
int maxArea(vector<int>& height) {
int MAXN=-1;
for(int i=0;i<height.size()-1;i++)
{
for(int j=i+1;j<height.size();j++)
{
if(i!=j)
{
int v=(j-i)*min(height[i],height[j]);
if(v>MAXN)
{
MAXN=v;
}
}
}
}
return MAXN;
}
};
不过,我们能否优化一下呢
我们发现我们在选择两条边的时候,我们肯定要选底边更长,更高的两条边,那么我们不妨采用双指针试试,即默认底边最长开始,每次更新最大体积,我们每次都选择舍弃两条边中较短的那条边(此时底边会减少1),通过这样来换去可能出现的最大体积
class Solution {
public:
int maxArea(vector<int>& height) {
int MAXN=-1,l=0,r=height.size()-1,v;
while(l<r)
{
v=(r-l)*min(height[l],height[r]);
if(v>MAXN)
{
MAXN=v;
}
if(height[l]<height[r])
{
l++;
}
else
{
r--;
}
}
return MAXN;
}
};