本题算比较简单的,从一侧进行遍历势必会导致超时,这种情况一般我们使用两边向内遍历的方式较好,每次比较新位置的盛水量,然后与当前的最大值进行比较,将较大的留下进行下一次比较。
class Solution {
public:
int maxArea(vector<int>& height) {
int res = 0;
int i = 0, j = height.size() - 1;
while(i < j)
{
// 当前的结果和计算的结果进行比较
res = max(res, (j - i) * min(height[i], height[j]));
if(height[i] < height[j])
++i;
else if(height[i] >= height[j])
--j;
}
return res;
}
};
// 转念一想使用双指针会不会好一些
// class Solution{
// public:
// int maxArea(vector<int> &height){
// int res = 0;
// int i = 0, j = height.size() - 1;
// while(i < j)
// {
// res = max(res, min(height[i], height[j]) * (j - i));
// if(height[i] < height[j])
// ++i;
// else
// --j;
// }
// return res;
// }
// };