Advertisement

华为od机试真题 javascript 实现【太阳能板最大面积】

阅读量:

该平台提供五种编程语言的实现路径及代码库。其中包含以下内容:

题目

在航天器的一侧安装长方形或正方形形状的太阳能板(图中的红色斜线区域),需要先安装两个竖立的支柱(图中的黑色竖条 ),随后将太阳能板固定在支柱上。

然而由于航天器各位置上的支柱长度不一(如图所示),太阳能板的最大可安装面积受限于最短的一端 的那根支柱的高度。例如:

现提供一组整形数组作为支柱高度数据,请计算如何选取两根相邻的支柱以获得最大可能面积的问题。

思路

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

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

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

4:暴力法 :只要两轮遍历求每两个柱子之间的组合面积即可

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

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

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

因此应该移动短板。

JS输入输出

JavaScript 本身有两种模式:V8 和 Node,两种模式在输入上略有不同。

Node:

复制代码
>       1. let readline = require("readline");

>  
>       2.  
>  
>       3. const rl = readline.createInterface({
>  
>       4.   input: process.stdin,
>  
>       5.   output: process.stdout,
>  
>       6. });
>  
>       7.  
>  
>       8. rl.on('line', function(line){
>  
>       9.     // line表示的就是输入的一行
>  
>       10.     let lines = line.split(' ').map(Number);
>  
>       11. });
>  
>  
>  
>  
>     代码解读

V8:

复制代码
>       1. //假设输入为:

>  
>       2. 4
>  
>       3. 5
>  
>       4. 1 2
>  
>       5.  
>  
>       6. // readline() 就表示输入的一行,和python中的 input()函数用法基本一致
>  
>       7. let n = readline().split('').map(item=>parseInt(item));  // 4
>  
>       8. let k = readline().split(' ').map(item=>parseInt(item)); // 5
>  
>       9. let [nums] = readline().split(' ').map(item=>parseInt(item)); // 1 2
>  
>  
>  
>  
>     代码解读

具体我也是参考了网上的博主的文章:[ACM模式下JavaScript(js)的输入输出 V8 Node_我先润了的博客-博客]( "ACM模式下JavaScriptjs的输入输出 V8 Node_我先润了的博客-博客")

ACM格式javascript 输入输出 - 衣囧~ - 博客园 (cnblogs.com)

不熟悉的可以自行查阅。

这里给出这位博主的总结:

node.js=V8+内置基本模块,相当于java中的JRE=JVM+java标准库

node就是带有能操作IO和网络库的V8引擎,提供了很多可调用的API使得JavaScript能够读写文件,网络请求,系统信息等操作。对V8引擎进行了封装,执行JavaScript的速度更快,性能更好。

Code

复制代码
 function main(heights) {

    
     let left = 0;
    
     let right = heights.length - 1;
    
     let result = -Number.MAX_VALUE;
    
  
    
     while (true) {
    
     if (left>=right){
    
         break;
    
     } else {
    
         let diff = right - left;
    
         let temp=0;
    
         if (heights[left] < heights[right]){
    
             temp = heights[left];
    
             left+=1;
    
         } else {
    
             temp = heights[right];
    
             right-=1;
    
         }
    
         if(diff * temp > result){
    
             result = diff * temp;
    
         }
    
     } 
    
     }
    
  
    
     console.log(result);
    
 }
    
  
    
  
    
 main([10, 9, 8, 7, 6 ,5, 4 ,3 ,2, 1])
    
    
    
    
    代码解读

要求

时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld

语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3),
PHP(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), Mysql(8.0)

全部评论 (0)

还没有任何评论哟~