/*盛最多水的容器问题
给定一个长度为 n 的整数数组height。有n条垂线,第 i 条线的两个端点是(i, 0)和(i, height[i])。
找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量 maxArea。
说明:你不能倾斜容器。
输入:[1,8,6,2,5,4,8,3,7]
输出:49
*/
//关键:相同情况下两边的距离越远越好
//区域受限于较短边
class text{
public static void main(String[] args) {
int arr[] = {1, 8, 6, 2, 5, 4, 8, 3, 7};
//双指针
int l=0;//最左边
int r=arr.length-1;//最右边
int n=arr.length-1;//间隔距离
int mz=0;//存水面积
while(n>0){
if(mz <= n * Math.min(arr[r],arr[l])){//取左边和右边中的最小值,乘以中间的间隔,即可算出面积
mz=n * Math.min(arr[r],arr[l]);//如果算出来的面积大于之前所算的面积,则把大面积赋值给当前面积
}
if(arr[l]>=arr[r]){
r--;//当左边的值大于等于右边的值时,右边的索引向中间移一位
}else if(arr[l]<=arr[r]){
l++;//当右边的值大于等于左边的值时,左边的索引向中间移一位
}
n--;//右边或左边向中间移一位后,间隔需要-1
}
System.out.println(mz);//将最大面积(容器)输出
}
}
盛最多水的容器问题(力扣)
猜你喜欢
转载自blog.csdn.net/qq_62731133/article/details/123721812#comments_21931592
今日推荐
周排行