题目 1973: 最多的水

博客围绕给定n个非负整数,求由其对应垂直线与x轴形成容器的最大盛水量问题展开。介绍了输入为含n个数的数组,输出为最大水量。解题思路是计算两两相距的最大容积,需注意短板效应,并给出参考代码,运用Java和动态规划方法。

时间限制: 1Sec 内存限制: 128MB

题目描述:(原题链接)

给定n个非负整数a1 a2…一个,其中每一个都表示坐标(i, ai)上的一个点。画了n条垂直线,使直线i的两个端点在(i, ai)和(i, 0)
它和x轴一起形成一个容器,使容器中含有最多的水。注意:不能使容器倾斜,n至少为2。


输入:

输入一个数组包含n个数

样例输入:

1 8 6 2 5 4 8 3 7


输出:

输出能够盛放的最大水量

样例输出 :

49


解题思路:

计算出两两相距的最大容积

注意事项:

短板效应

参考代码:

import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    private static void maxVolumn(ArrayList<Integer> arr) {
        int max=0;
        for(int left=0,right=arr.size()-1;left<right;) {  //左右标记交替移动求出最大公共容积
            if(arr.get(left)<arr.get(right)) {
                max =Math.max(max, arr.get(left)*(right-left));
                left++;
            }
            else {
                max=Math.max(max, arr.get(right)*(right-left));
                right--;
            }
        }
        System.out.println(max);
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        ArrayList<Integer> arr=new ArrayList<Integer>();
        while(in.hasNext()) {
            arr.add(in.nextInt());    //存储容器的每个高
        }
        maxVolumn(arr);
        in.close();
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值