题目描述:(力扣原题是这样描述的)
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
考虑两点,盛水的体积和x、y的值有关,x则是两个数之间的间隔,y则取决于两个数之间较短的那个。本题我采用双指针的方式
来看代码:
class Demo{
public static void main(String[] args){
//测试arr
int[] arr={1,8,6,2,5,4,8,3,7};
maxArea(arr);
}
public int maxArea(int[] arr){
//定义双指针 l指向第一个 r指向最后一个
int l=0,r=arr.length-1;
int area=0;//初始面积为0
while(l<r){
//开始计算面积 长是两个数之间的间隔距离=r-l; 宽是两个数之间较小的
int resArea=Math.min(arr[l],arr[r]) * (r-l);
//计算的值和初始值比较 选择较大的即可
area=Math.max(resArea,area);
//判断移动哪个指针要根据arr[l]和arr[r]的大小来判断,谁小移动谁 才能保证目标值更大
if(arr[l]<arr[r]){
l+=1;
}else{
r-=1;
}
}
return area;
}
}