题目描述
给航天器一侧加装长方形和正方形的太阳能板(图中的斜线区域)
需要先安装两个支柱(图中的黑色竖条)
再在支柱的中间部分固定太阳能板
但航天器不同位置的支柱长度不同
太阳能板的安装面积受限于最短一侧的那支支柱的长度
现提供一组整型数组的支柱高度数据
假设每个支柱间的距离相等为一个单位长度
计算如何选择两根支柱可以使太阳能板的面积最大
输入描述
10,9,8,7,6,5,4,3,2,1
注释,支柱至少有两根,最多10000根,能支持的高度范围1~10^9的整数
柱子的高度是无序的
例子中的递减是巧合
输出描述
可以支持的最大太阳板面积:(10m高支柱和5m高支柱之间)
25
示例1
输入
10,9,8,7,6,5,4,3,2,1
输出
25
备注 10米高支柱和5米高支柱之间宽度为5,高度取小的支柱高度也是5
面积为25
任取其他两根支柱所能获得的面积都小于25 所以最大面积为25。
思路分析
- 相邻单位柱子间隔1个单位,所以宽等于数组下标差
- 高度取小的支柱高度。
- 任取其他两根支柱所能获得的面积,可以循环遍历所有可能,取其中最大的。
参考代码
注:题目网上找的,参考代码是练习用,仅供参考,并不保证用例通过率。
import java.util.Scanner;
/**
* 航天器可以支持的最大太阳板面积
*/
public class Test13 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] highsStr = scanner.nextLine().split(",");
int highLen = highsStr.length;
long[] highs = new long[highLen];
for (int i = 0; i < highLen; i++) {
highs[i] = Long.parseLong(highsStr[i]);
}
long res = 0, p1, p2, high, width;
for (int i = 0; i < highLen; i++) {
for (int j = i + 1; j < highLen; j++) {
p1 = highs[i];
p2 = highs[j];
// 高 = 短柱子的高
high = Math.min(highs[i], highs[j]);
// 宽 = 后面的柱子下标 - 前面柱子的下标
width = j - i;
res = Math.max(res, high * width);
}
}
System.out.println(res);
}
}