华为OD机试真题 JavaScript 实现二元组个数2023 Q1 | 100分

Posted MISAYAONE

tags:

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

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

 

题目

给定两个数组a,b,若a[i] == b[j] 则称 [i, j] 为一个二元组,求在给定的两个数组中,二元组的个数。

输入描述:
第一行输入 m
第二行输入m个数,表示第一个数组

第三行输入 n
第四行输入n个数,表示第二个数组

输出描述:

二元组个数。

示例1:

输入:

4

1 2 3 4

1

1

输出:

1

说明:二元组个数为 1个

示例2:

输入:

4
1 1 2 2 4 5

3

2 2 4

输出:

4

说明:二元组个数为 5 个

思路

1:好像难度不大,要注意的就是二元组的唯一性是由两个下标来决定的。

2:没看到有两个数组长度的参数范围,如果暴力双循环对比求解的话,应该是O(n^2)复杂度。

3:简单的优化思路就是用dict存储两个数组的元素及出现的次数,用空间换时间。复杂度可以降到O(n)

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博客

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

不熟悉的可以自行查阅。

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

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

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

Code

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
function main(nums_m, nums_n) 
    var set_m = new Set(nums_m)
    var set_n = new Set(nums_n)
    
    var dict_m = 
    for (let m of nums_m) 
        if (set_n.has(m)) dict_m[m] ? dict_m[m]++ : (dict_m[m] = 1)
    
    
    var dict_n = 
    for (let n of nums_n) 
        if (set_m.has(n)) dict_n[n] ? dict_n[n]++ : (dict_n[n] = 1)
    
    
    let result = 0
    for (let k in dict_m) 
        result += dict_m[k] * dict_n[k]
    
    
    console.log(result)
 

 
 
main([1, 2, 3, 4], [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)

以上是关于华为OD机试真题 JavaScript 实现二元组个数2023 Q1 | 100分的主要内容,如果未能解决你的问题,请参考以下文章

100%通过率华为OD机试真题 C 实现二元组个数2022.11 Q4新题

华为OD机试真题Python实现统计匹配的二元组个数真题+解题思路+代码(2022&2023)

华为OD机试题,用 Java 解统计匹配的二元组个数问题 | 含解题说明

新(2023Q2模拟题JAVA)华为OD机试 - 统计差异值大于相似值二元组个数

华为OD机试真题 JavaScript 实现连接器问题2023 Q1 | 200分

华为OD机试 -统计匹配的二元组个数(JavaScript) | 机试题+算法思路+考点+代码解析 2023