给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
import java.util.Scanner;
public class main05 {
//使用贪心算法,比第二种方法更高效
public static int test(int[] arr,int length){
int start = 0;
int end = length-1;
int x,y,area;
int result = 0;
while(start!=end){
x = end-start;
y = Math.min(arr[start],arr[end]);
area = x*y;
if (result<area)
result = area;
if (arr[start]>=arr[end])
end--;
else
start++;
}
return result;
}
//类似冒泡方法,挨个计算,找出最大面积
public static int test2(int[] arr,int length){
int x,y,area;
int result = 0;
for (int i = 0; i < length; i++) {
for (int j = i+1; j < length; j++) {
x = j-i;
y = Math.min(arr[i],arr[j]);
area = x*y;
if (result<area)
result = area;
}
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[100];
int i=0;
String x = scanner.nextLine();
String[] arrs = x.split(" ");
for (int j = 0; j < arrs.length; j++) {
arr[j] = Integer.parseInt(arrs[j]);
}
int result = test(arr,arrs.length);
int result2 = test2(arr,arrs.length);
System.out.println(result);
System.out.println(result2);
}
}