解题 思路1 :
- 通过双指针--左右指针夹逼法
- 左右指针各指向两边,求出两个指针所指向height的值的最小的那个,在计算出最大的面积,
- 在移动指针方面,左指针如果指向的边是较小的那个,则需要去移动左指针,寻找更高的左边,因为指针的移动都会将宽度减小,若想要获得最大的面积,需要将高度增大,如果右边的边比较小,则移动右边的指针
class Solution {
public:
int maxArea(vector<int>& height) {
int p1 = 0;
int p2 = height.size() - 1;
int maxArea = 0;
while (p1 < p2) {
int h = min(height[p1], height[p2]);
int w = p2 - p1;
int area = h * w;
maxArea = max(maxArea, area);
//左边长较小,则移动左指针
if (height[p1] < height[p2]) {
p1++;
} else {
p2--;
}
}
return maxArea;
}
};