本题是一道经典的面试题,最优的做法是使用「双指针」。优化策略是小于某次保存的最小高度时,l++ 和 r-- ,因为如果比两边最小高度还要小,距离又被拉近,不可能为最大容量,当遇到更大高度时,再比较maxContainer = max(maxContainer,con)取最大值。
class Solution {
public:
int maxArea(vector<int>& height) {
int l =0;
int r = height.size()-1;
int maxContainer = 0;
while(l<r)
{
int con = (r-l)*min(height[l],height[r]);
maxContainer = max(maxContainer,con);
int minH = min(height[l],height[r]);
while(l<r&&height[l]<=minH)
{
l++;
}
while(l<r&&height[r]<=minH)
{
r--;
}
}
return maxContainer;
}
};