问题描述:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
双指针法
def maxArea(self, height: list[int]) -> int:
"""
盛水最多的容器
@param height:
@return:
"""
h_len, max_area = len(height), 0
if h_len < 2:
return max_area
l, r = 0, h_len - 1
while l < r:
area = min(height[l], height[r]) * (r - l)
if area > max_area:
max_area = area
if height[l] < height[r]:
l += 1
else:
r -= 1
return max_area
class Solution {
public int maxArea(int[] height) {
int heightLen = height.length, res = 0;
if (heightLen < 2){
return res;
}
int l = 0, r = heightLen - 1;
while(l < r){
int area = Math.min(height[l], height[r]) * (r - l);
res = (area > res)? area: res;
if (height[l] < height[r]){
l++;
}
else{
r--;
}
}
return res;
}
}