class Solution {
public int maxArea(int[] height) {
// 利用双指针
int left = 0;
int right = height.length - 1;
// 开始循环判断
// 在这里的时候,left == right是没有用的,所以直接 < 即可
int result = 0;
while (left < right) {
// 底边长度为right - left
int b_len = right - left;
// 高度是他们之间最小的那一个
// 这里每次固定移动高度较低的那一边
int h_len = height[left] < height[right] ? height[left++] : height[right--];
// 获取面积
int area = b_len * h_len;
// 大于result就刷新值
if (area > result) {
result = b_len * h_len;
}
}
return result;
}
}
就是快
因为很多同学也是使用C++,和Python的,所以我今后也同时提供C++和python的语法
C++解法没有之一:双指针
cpp复制代码
class Solution {
public:
int maxArea(vector<int>& height) {
int left = 0;
int right = height.size()- 1;
int result = 0;
while(left < right){
int b_len = right - left;
int h_len = height[left] < height[right] ? height[left++] : height[right--];
int area = b_len * h_len;
if(area > result){
result = area;
}
}
return result;
}
};
class Solution:
def maxArea(self, height: List[int]) -> int:
left = 0
right = len(height) - 1
result = 0
while left < right:
b_len = right - left
h_len = height[left] if height[left] < height[right] else height[right]
if height[left] < height[right]:
left += 1
else:
right -= 1
area = b_len * h_len
if area > result:
result = area
return result