基本思路
假设有两个坐标点(i, ai)和(j, aj),且j > i,aj > ai。
另有坐标点(k, ak),i < k < j。坐标点i和坐标点j形成的容器容积比坐标点 i 和坐标点 k 形成的容器容积大。
如果 ai > ak,宽度变小,高度也变小(容积取决于较小边),容积变小;
如果 ai < ak,宽度变小,高度不变,容积变小。
所以,可以使用首尾指针,移动首尾指针中高度小的。
int maxArea(vector<int>& height) {
int head = 0;
int tail = height.size() - 1;
int max = 0;
while (tail > head)
{
if (height[head] < height[tail])
{
if (height[head] * (tail - head) > max)
max = height[head] * (tail - head);
head++;
}
else
{
if (height[tail] * (tail - head) > max)
max = height[tail] * (tail - head);
tail--;
}
}
return max;
}