class Solution
{
public:
int maxArea(vector<int>& height)
{
int x = 0, y = height.size() - 1;
int res = 0;
while (x < y)
{
res = max(res, (y - x)*min(height[x], height[y]));
if (height[x] <= height[y])
{
x++;
}
else //这里不能改为if (height[x] > height[y]),因为上个条件可能改变了x的值。
{
y--;
}
}
return res;
}
};
刷题总结:
本题可以采用暴力的方法,把全部元素遍历一遍,显然速度不是最优的!
所以可以采用双指针分别指向数组的两边,因为 height[ x ] > height[ y ] 时,移动 y 显然是没用的,所以 x++;
height[ x ] > height[ y ] 时,移动 x 显然是没用的,所以 y --;
用res记录到每一轮为止搜索的最大面积的值。