这题最关键的是两点,一是两边往中间找,二是每次放弃最短的版。
这么做的原因在于:从起点和终点开始找,宽度最大,这时每移动一次其中一个点,必然宽度变小。
如此一来,想求最大,只有高度增长才有可能做到,即放弃高度较小的点。
class Solution {
public:
int maxArea(vector<int> &height) {
int res=0,l=0,r=height.size()-1;
while(l<r)
{
res=max(res,min(height[l],height[r])*(r-l));
if(height[l]<height[r])l++;
else r--;
}
return res;
}
};
网友评论