没看答案,用双指针遍历height数组的左右两端,对于相对短的一边就移动(木桶效应),并不断更新答案。
python
class Solution:
def maxArea(self, height: List[int]) -> int:
n = len(height)
left, right = 0, n-1
res = 0
while left < right:
if height[left] <= height[right]:
res = max(res, (right - left) * height[left])
left += 1
else:
res = max(res, (right - left) * height[right])
right -= 1
return res
c++
class Solution {
public:
int maxArea(vector<int>& height) {
// 数组的双指针一般都是首尾指针
// 根据木桶效应,容器的接水量受短边制约,所以每次移动短边的指针
int n = height.size();
int left = 0, right = n-1;
int res = 0;
while (left < right) {
res = max(res, (right - left) * min(height[left], height[right]));
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return res;
}
};