盛最多水的容器问题(力扣)

/*盛最多水的容器问题
给定一个长度为 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