华为OD机试 - 太阳能板最大面积 - 双指针(Java 2024 B卷 100分)

该博客介绍了华为在线测评(OD)中的一道编程题,目标是找到一组支柱,使得安装的太阳能板面积最大。题目要求基于一组无序的支柱高度数据,计算出最大面积。解题策略采用双指针法遍历所有支柱组合,以找到最短支柱限制的面积,并用Java实现算法。最终输出最大面积为49。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述

给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需要先安装两个支柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。

但航天器不同位置的支柱长度不同,太阳能板的安装面积受限于最短一侧的那根支柱长度。

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

柱子的高度是无序的,等比降序只是为了好看。

在这里插入图片描述

二、输入描述

10,9,6,7,8,5,4,7,2,3

三、输出描述

49

四、测试用例

测试用例1

1、输入

3,5,1,2

2、输出

6

测试用例2

1、输入

10,10,10,10

### 华为OD技术中的太阳能板最大面积规格参数 在华为OD技术中,关于太阳能板最大面积的计算问题是一个典型的算法优化问题。该问题的核心在于通过选择两根支柱来最大太阳能板面积,其中面积由支柱间的宽度和较矮的一侧支柱的高度决定。 #### 问题描述 给定一组整数数组 `heights` 表示若干支柱的高度,每根支柱之间的水平间距为1个单位长度。目标是从这些支柱中选出两根作为支撑点,在它们之间安装一块矩形太阳能板太阳能板面积等于这两根支柱之间的距离乘以两者中较低的高度。最终目的是找到能够实现的最大面积。 #### 解决方案概述 此问题可以通过 **双指针法** 来高效解决。初始时设置左指针指向数组的第一个元素,右指针指向最后一个元素。每次迭代过程中,根据当前左右指针所对应的柱子高度以及二者之间的距离计算出可能形成的面积,并记录下最大面积值。随后移动高度较小的那一端指针向另一方向靠近一步,重复上述过程直到两个指针相遇为止 [^3]。 以下是具体实现方法: ```python def max_area(heights): left = 0 right = len(heights) - 1 max_area_value = 0 while left < right: current_width = right - left height_left = heights[left] height_right = heights[right] min_height = min(height_left, height_right) area = min_height * current_width if area > max_area_value: max_area_value = area if height_left < height_right: left += 1 else: right -= 1 return max_area_value ``` 这段代码实现了寻找最大面积的功能。它初始化了两个变量别代表左侧和右侧边界位置索引,同时维护了一个存储目前发现的最大面积数值的变量。利用循环逐步调整两端的位置直至无法再改进结果 [^4]。 对于输入样例 `[10,9,8,7,6,5,4,3,2,1]` ,执行以上函数会返回输出 `25` 。这是因为当选用第零号(高度为10)与第五号(高度为5)支柱构建面板时可得最佳解:其宽为五单位而高则取低者即也为五个单位从而总面积达到二十五平方单位 [^5]。 #### 结果析 采用这种方法的时间复杂度仅为O(n),因为整个流程只需遍历一次列表即可完成所有必要比较操作;空间复杂度同样保持良好状态——仅需常量级额外内存用于保存临时变量如左右界限及最优解等信息 [^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值