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

被折叠的 条评论
为什么被折叠?



