华为OD机试真题 JavaScript 实现最多颜色的车辆2023 Q1 | 100分

Posted MISAYAONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为OD机试真题 JavaScript 实现最多颜色的车辆2023 Q1 | 100分相关的知识,希望对你有一定的参考价值。

    所有题目均有四种语言实现。C++ 实现目录Python实现目录JavaScript实现目录Java实现目录

题目

题目内容
在一个狭小的路口,每秒只能通过一辆车,假好车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量。

三种颜色编号为0 ,1 ,2

输入描述
第一行输入的是通过的车辆颜色信息

[0,1,1,2] 代表4 秒钟通过的车辆颜色分别是 0 , 1 , 1 , 2 

第二行输入的是统计时间窗,整型,单位为秒

输出描述
输出指定时间窗内经过的最多颜色的车辆数量。

样例
样例一:
输入

0 1 2 1
3
输出

2

样例解释

在 3 秒时间窗内,每个颜色最多出现 2 次。例为:[1,2,1]


样例二:
输入

0 1 2 1

2
输出

1

样例解释

在 2 秒时间窗内,每个颜色最多出现1 次。

思路

1:个人觉得这个题的难点就在题目理解上,说一个滑动窗口的话,大家应该就都理解了,给一个数组,一个固定大小的滑动窗口,一直向前滑动,找出这个滑动窗口内出现最多的数字的个数。

2:可以用一个hashmap保存滑动窗口的数据来统计即可。但是每次滑动之后还需要对hashmap按照value的大小再排序,那这样的复杂度就比较高了。但是暴力解法应该也能过个70%、80%吧

3:这里有一个巧妙的方法,既然只有三种颜色的车,那么我们岂不是只需要一个长度为3的数组来保存每个颜色出现的次数就行了,数组的下标表示颜色,数组中存的值表示出现次数。这样三个数来比较,应该快多了。用数组来替代hashmap。

JS输入输出

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

Node:

let readline = require("readline");
 
const rl = readline.createInterface(
  input: process.stdin,
  output: process.stdout,
);

rl.on('line', function(line)
    // line表示的就是输入的一行
    let lines = line.split(' ').map(Number);
);

V8:

//假设输入为:
4
5
1 2

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

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

不熟悉的可以自行查阅。

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

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

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

Code

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
function main(cars, n) 
    // 只有3种颜色
    var car_count  = new Array([3])
    for (let i=0;i<3;i++) 
        car_count[i] = 0
    
    for (let i=0;i<n;i++) 
        car_count[cars[i]]+=1
    
    
    let result = Math.max(car_count[0], car_count[1], car_count[2])
    for (let i=n;i<cars.length;i++) 
        
        car_count[cars[i]] += 1
        car_count[cars[i-n]] -= 1
        result =  Math.max(result,  Math.max( Math.max(car_count[0], car_count[1]), car_count[2]))
    
    
    console.log(result)


main([0,1,2, 1], 3)

要求

时间限制: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)

以上是关于华为OD机试真题 JavaScript 实现最多颜色的车辆2023 Q1 | 100分的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题 JavaScript 实现最多获得的短信条数2023 Q1 | 100分

华为OD机试真题 JavaScript 实现日志首次上报最多积分2023 Q1 | 100分

华为OD机试真题 JavaScript 实现日志首次上报最多积分2023 Q1 | 100分

华为OD机试真题 JavaScript 实现租车骑绿岛2023 Q1 | 100分

华为OD机试真题 JavaScript 实现租车骑绿岛2023 Q1 | 100分

华为OD机试真题 JS 实现最多组合直角三角形个数2023 Q1 | 100分