思路
最容易想到的暴力解法就是从左边开始,对于每条线,都遍历其右边每条线,计算对应的容量。
显然,这会出现很多重复计算。
当右边的线高度小于其左边的线时,遍历这条线是无意义的,因为它最大的容量一定小于其左边的最大容量。所以我们要进行过滤。
而对每条线的右边线进行遍历时,如果左边的线小于右边的线,那么这种遍历也是无意义的。
所以我们可以使用左右双指针,跳过无意义的重复。
Python版本
class Solution {
public int maxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int res = 0;
while (l < r){
int h = Math.min(height[l],height[r]);
int t = (r - l) * h;
res = Math.max(res,t);
if (height[l] < height[r]){
l++;
}else{
r--;
}
}
return res;
}
}
Java版本
class Solution {
public int maxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int res = 0;
while (l < r){
int h = Math.min(height[l],height[r]);
int t = (r - l) * h;
res = Math.max(res,t);
if (height[l] < height[r]){
l++;
}else{
r--;
}
}
return res;
}
}