题解
双指针
一开始想到了,首先先看给的数据的大小,一看数据就知道不能用0(n^2)来解决,不能暴力解决。
想到了双指针,但没想到左移右移的条件,下次还是需要要仔细思考一下子的。
左右指针分别指在最左边和最右边
左指针右移的条件:
是当左指针的那个高度小于右指针的那个高度。原因:当左指针高度小于右指针,那么右指针左移的任何一个矩形的面积都要比当前的要小。
右指针左移的条件:
是当左指针的那个高度大于右指针的那个高度。原因:当左指针那个高度大于右指针那个高度,右指针和左指针右移的任何一个高度比当前的矩形面积都要小。
思路还是比较清晰的,代码即按思路的顺序来写的,还是比较简单的。
代码
class Solution{
public:
int maxArea(vector<int>& height){
int n = height.size();
int right = n - 1,left = 0;
int ans = 0,hheight;
while(left < right){
hheight = min(height[left],height[right]);
//cout<<hheight<<'\n';
ans = max(ans,hheight*(int)(right - left));
if(height[left] < height[right]){
left++;
}
else{
right--;
}
}
return ans;
}
};