华为机试:太阳能板最大面积

题目描述

给航天器一侧加装长方形和正方形的太阳能板(图中的斜线区域)
需要先安装两个支柱(图中的黑色竖条)
再在支柱的中间部分固定太阳能板
但航天器不同位置的支柱长度不同
太阳能板的安装面积受限于最短一侧的那支支柱的长度

现提供一组整型数组的支柱高度数据
假设每个支柱间的距离相等为一个单位长度
计算如何选择两根支柱可以使太阳能板的面积最大

输入描述


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);
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值