太阳能板最大面积js

该博客探讨了如何在航天器上安装太阳能板,其中面积受限于最短支柱的长度。文章通过题目解析、代码实现和优化过程,详细解释了如何使用JavaScript找到最大面积的方法,特别是利用双指针策略降低时间复杂度。

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

题目:

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

输入描述

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.注意题目中黑色加粗字体,我们理解一下。也就是说对于两根柱子而言,即使一个是1,一个是9,那么这个太阳能板能安装的最大面积也只是取决于最短柱子的长度,因此我们在获取这两根柱子高度时,应该选择Math.min(arr[i],arr[j])来作为太阳能板的高度。

2.而太阳能板的宽度,则是两根柱子的索引差,用j-i即可。

3.用一个变量来保存最大的面积,通过不断比较更新最大面积。

 代码:

function maxSqr(arr) {
    let maxValue = 0 
    for(let i = 0 ; i <arr.length ; i++) {
        for(let j = 0; j < arr.length;j++) {
            maxValue = Math.max(maxValue,Math.min(arr[i],arr[j])*(j-i))
        }
    }
    return maxValue
}

console.log(maxSqr([10,9,8,7,6,5,4,3,2,1]))  //25

牛客网上的代码只需要处理一下输入输出即可。

代码优化:

上述代码时间复杂度较高,因此我们需要对代码进行优化。

可以使用双指针的解法,初始化双指针分列水槽左右两端,循环每轮将短板向内移动一格,并更新面积最大值,直到两指针相遇时跳出;即可获得最大面积。

因为每次移动短板,这个太阳板的最短板可能变大,下一个太阳板的面积可能增大。

而如果移动长板,则这个太阳板的短板不变或者变小,下一个太阳板的面积必然变小。

因此应该移动短板。

var maxArea = function(height) {
    let i = 0 , j = height.length - 1, res = 0;
    while(i<j) {
        res = height[i] < height[j] ? 
        Math.max(res,(j-i)*height[i++]) : 
        Math.max(res,(j-i)*height[j--])
    }
    return res
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值