解题思路

1.设定双指针left和right
2.v = (right - left) * min(h[left],h[right]),因为无论移动哪个指针,right-left都会变小,要想得到v的最大值,我们只能使min(h[left],h[right])增大,所以需要不断移动高度较小的那个指针。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
int maxArea(vector<int>& h) {
int left = 0,right = h.size()-1,res = 0;
while(left < right)
{
int v = (right - left) * min(h[left],h[right]); //此时能盛水的体积
res = max(res,v);
h[left] < h[right] ? ++left : --right; //移动高度较小的指针
}
return res;
}
};