华为OD机试真题 JavaScript 实现最大化控制资源成本2023 Q1 | 200分

Posted MISAYAONE

tags:

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

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

题目

公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你设计算法帮他们解决一个任务混部问题:有taskNum项任务,每个任务有开始时间(startTime),结束时间(endTime),并行度(parallelism)三个属性,并行度是指这个任务运行时将会占用的服务器数量,一个服务器在每个时刻可以被任意任务使用但最多被一个任务占用,任务运行完成立即释放(结束时刻不占用)。任务混部问题是指给定一批任务,让这批任务由同一批服务器承载运行,请你计算完成这批任务混部最少需要多少服务器,从而最大最大化控制资源成本。

输入描述:
第一行输入为taskNum,表示有taskNum项任务
接下来taskNum行,每行三个整数,表示每个任务的开始时间
(startTime ),结束时间(endTime ),并行度(parallelism)

输出描述:
一个整数,表示最少需要的服务器数量

示例1 输入输出示例仅供调试,后台判断数据一般不包含示例
输入
3
2 3 1
6 9 2
0 5 1
输出

2

说明
一共有三个任务,第一个任务在时间区间【2,3】运行,占用1个服务
器,第二个任务在时间区间【6,9】运行,占用2个服务器,第三个任
务在时间区间【0,5】运行,占用1个服务器,需要最多服务器的时间
区间为【2,3】和【6,9】,需要2个服务器。

示例2 输入输出示例仅供调试,后台判断数据一般不包含示例
输入
2
3 9 2
4 7 3
输出
5
说明
一共两个任务,第一个任务在时间区间【3,9】运行,占用2个服务
器,第二个任务在时间区间【4,7】运行,占用3个服务器,需要最多
服务器的时间区间为【4,7】,需要5个服务器。

备注:
1<=taskNum<=100000
0<=startTime<endTime<=50000
1<=parallelism<=100

思路

2:新思路就是取一个set合集,放入所有的时间点。然后遍历每一个时间点,判断其是否在每一个区间之内,如果在,那么该时间点所需要的服务器数量+该区间的服务器数量。

因为区间的交集,必然最后的结果会有两个区间起始节点其中之一。

3:举一个比较长的例子:

4

0 5 1
2 4 1

3 7 3
6 9 2

所有时间点为:

[0,5,2,4,3,7,6,9]

逐个元素判断其是否在四个区间之内:

0 -> 1

5 -> 3+2 = 5

2 -> 1 + 1= 2

4 -> 1+1+3 = 5

3 -> 1+1+3 = 5

7 -> 3 + 2 = 5

6 -> 3 + 2 = 5

9 -> 2

因此最大为5。

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(ranges) 
    ranges = ranges.sort(function(a,b)
                return a[0] > b[0]
            )

    var points = new Set()
    for (let i=0;i<ranges.length;i++) 
        points.add(ranges[i][0])
        points.add(ranges[i][1])
        
    
    points = new Set(Array.from(points).sort())
    
    let result = 0
    var ignore = new Set()

    for (let point of points) 
        let current_sum = 0
        for (let i=0;i<ranges.length;i++) 
            if (ignore.has(i))
                continue
            

            let start = ranges[i][0]
            let end = ranges[i][1]
            let count = ranges[i][2]
            if (point < start) 
                break
            else if (point < end)
                current_sum += count
            else
                ignore.add(i)
        
        result = Math.max(result, current_sum)
    

    console.log(result)

 
main([[3, 9, 2],[4, 7, 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 | 200分的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题 JavaScript 实现最大化控制资源成本2023 Q1 | 200分

华为OD机试真题 JavaScript 实现最大平分数组2023 Q1 | 200分

华为OD机试真题 JavaScript 实现最大连续文件之和 /区块链文件转储系统2023 Q1 | 100分

华为OD机试真题 JS 实现最大报酬2023 Q1 | 100分

2023 华为OD机试(JavaScript)真题

2023 华为OD机试(JavaScript)真题