Advertisement

太阳能板最大面积js

阅读量:

题目:

为航天器一侧安装长方形或正方形形状的太阳能板(见图中以红色线条标注的部分),这一步骤需要首先安装两根黑色竖条作为支撑结构,并将这两根支撑杆放置在适当的位置后方可进行下一步操作——固定太阳电池板在其间的中部位置。然而由于航天器各部位的高度不同,在实际施工中可能会遇到一些特殊的技术难题。因此,在实际施工中,太阳能板的最大覆盖面积将受限于最短支撑杆的高度。

输入描述

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

注释信息,在系统参数设置中要求主柱数量最低设置为两根,在设计阶段则可最多允许配置一千万根支撑构件;该系统可容纳从一到十亿数量级的所有整数值;各柱子高度之间并无固定顺序;并未遵循系统规律

输出描述

可以支持的最大太阳板面积:(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
    
    
    
    
    AI写代码

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

代码优化:

鉴于该代码的时间复杂度相对较高,则需要对其进行优化以提升效率。
我们可以采用双指针的方法来解决这一问题。
初始化双指针分别位于水槽的左右两端,在循环中每次将较短的那一端向内移动一格,并更新面积的最大值。
直到两指针相遇时跳出循环;此时即可获得最大面积。
每次移动较短的一端时,则有可能导致下一个时间段的面积出现增大情况。
相反地如果选择移动较长的一端则该时间段的最短板不会变长或变得更短。
因此为了使后续时间段的最大面积最大化,则应该优先选择每次移动较短的一端。

复制代码
 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
    
 };
    
    
    
    
    AI写代码

全部评论 (0)

还没有任何评论哟~