Note:
两个指针从两头开始,每次移动短的那个,之后更新最大值
反证法:一定有一个指针先到最优解,不妨设左边的指针先到最优解,那么右边的一定会一直往最优解靠拢,若出现更高的,那么就与最优解冲突了
代码如下:
class Solution {
public:
int maxArea(vector<int>& height) {
int res = 0, l = 0, r = height.size() -1;
while(l < r){
res = max(res, min(height[l], height[r]) * (r - l) );
if(height[l] > height[r]) r --;
else l ++;
}
return res;
}
};