原题链接:Leecode 11. 盛最多水的容器
使用双指针的思想,因为面积等于min(height[i],height[j])*(j-i)
,我们定义左指针i
,右指针j
,每次将较短的那块板向中间移动一位,(如果长板向中间移位,那么底减小1,移动后的那块板可能比之前的短板要长,那么高还和移动前一样,而底减小了,面积减小;如果移动后的那块板比之前的短板要短,那么高比移动前减小,底也减小,面积减小,所以移动长板面积一定减小。而如果移动短板,那么在底减小1的情况下,高可能增大,所以面积也可能增大。)
class Solution {
public:
int maxArea(vector<int>& height) {
int i=0,j=height.size()-1;
int res=0;
while(i<j)
{
res=(height[i]<height[j]) ? max(res,(j-i)*height[i++]) : max(res,(j-i)*height[j--]);
}
return res;
}
};