给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
思路:可以理解成长方形的面积,宽就是下标之差,长就是最小值(left ,right)
可以想到用双指针解决
class Solution {
public int maxArea(int[] height) {
int left=0,right= height.length-1;
int ans= Integer.MIN_VALUE;
while(left<right){
ans=Math.max(ans,Math.min(height[left],height[right])*(right-left));
if(height[left]<=height[right]){
++left;
}
else{
--right;
}
}
return ans;
}
}
可以再次基础上在此提高速率
class Solution {
public int maxArea(int[] height) {
int left=0,right= height.length-1;
int ans= Integer.MIN_VALUE;
int mn=0;
while(left<right){
ans=Math.max(ans,Math.min(height[left],height[right])*(right-left));
mn=Math.min(height[left],height[right]);
if(height[left]<=mn && left<right){
left++;
}
if(height[right]<=mn && left<right){
right--;
}
}
return ans;
}
}