
双指针解法:
首先分析题目,盛水的容量其于宽度与小的高度,先初始化两个指针分别在第一个与最后一个数(i,j)
如下:

我们可以分析发现,当heigth[i]为3时,我们移动j只会让宽度变小,所以i++,同理当i=1时,需要j--,当i=j时,遍历结束。
这样我们就省略了固定一个指针遍历其他指针的时间,时间复杂度降低到O(n)。
同时,记录每次的面积,最终取最大值。
代码:
cpp
class Solution {
public:
int maxArea(vector<int>& height) {
int res=0;
int i=0;
int j=height.size()-1;
while(i<j)
{
int area=(j-i)*min(height[i],height[j]);
res=max(res,area);
if(height[i]<height[j])
{
i++;
}else{
j--;
}
}
return res;
}
};