题目意思就是说有n块木板,对于第i个木板长度应该是a[i],竖直放在x坐标轴上,现在为任选两个木板,求最大能盛水的体积。
- 两块木板能盛水的多少取决与短的木板的长度。所以不需要枚举所有可能的(i , j)(i < j)。起始 i = 1, j = n(两个位置一个向后挪动,一个向前挪动),对于一组(i, j), 如果a[i] > a[j], 那么使 j 向前挪动,才可能使总体积变大,因为无论i向后挪动,还是j向前挪动,都会使(j - i)变小, 所以要保留长度长的木板, 长度短的木板舍弃
class Solution {
public:
int maxArea(vector<int>& height) {
int b = 0, e = height.size() - 1;
int mx = INT_MIN;
while(b < e)
{
int t = min(height[b], height[e]);
int area = t * (e - b);
mx = max(mx, area);
if(height[b] <= height[e])
b ++;
else
e --;
}
return mx;
}
};