华为OD机试真题 JavaScript 实现最小调整顺序次数2023 Q1 | 100分

Posted MISAYAONE

tags:

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

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

题目

  给定一个队列,但是这个队列比较特殊,可以从头部添加数据,也可以从尾部添加数据,但是只能从头部删除数据。输入一个数字n,会依次添加数字1~n(也就是添加n次)。

        但是在添加数据的过程中,也会删除数据,要求删除必须按照1~n按照顺序进行删除,所以在删除时,可以根据需要调整队列中数字的顺序以满足删除条件。

输入描述:

第一行一个数据N,表示数据的范围。

接下来的2N行是添加和删除语句。其中:head add x 表示从头部添加元素 x,tail add 表示从尾部添加元素,remove表示删除元素。

输出描述:

输出一个数字,表示最小的调整顺序次数。

示例

5
head add 1
tail add 2
remove
head add 3
tail add 4
head add 5
remove
remove
remove
remove

输出:

1

说明:

第1步:[1]

第2步:[1,2]

第3步:头部删除1,无需调整,还剩[2]

第4步:[3,2]

第5步:[3,2,4]

第6步:[5,3,2,4]

第7步:头部删除2,调整顺序再删除,还剩[3,4,5]

第8步:头部删除3,无需调整,还剩[4,5]

第9步:头部删除4,无需调整,还剩[5]

第10步:头部删除5,无需调整

只需要调整1次

思路

1:按照题目要求模拟整个过程即可。

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(input_strs) 
    var queue = new Array ()
    let flag = true
    let result = 0
    
    for (let i = 0 ;i < input_strs.length; i++) 
            var input_str = input_strs[i]
            
            if (input_str.startsWith("tail add")) 
                queue.push(input_str)
             else if (input_str.startsWith("head add")) 
                if (queue.length && flag) 
                    flag = false
                
                queue.push(input_str)
             else 
                if (!queue.length) 
                    continue
                
                if (!flag) 
                    result++
                    flag = true
                
                queue.pop(input_str)
            
    
    
    console.log(result)


main(["head add 1",
"tail add 2",
"remove",
"head add 3",
"tail add 4",
"head add 5",
"remove",
"remove",
"remove",
"remove"])

要求

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

华为OD机试真题 JavaScript 实现等和子数组最小和2023 Q1 | 100分

华为OD机试真题 JavaScript 实现等和子数组最小和2023 Q1 | 100分

华为OD机试真题 JS 实现数组取最小值2023 Q1 | 100分

华为OD机试真题 C 实现实力差距最小总和2023 Q1 | 200分

华为OD机试真题 JS 实现组合出合法最小数2023 Q1 | 100分