华为OD机试-任务混部(JavaScript语言)

本人算法小白,如有不合理地方还请大神指点;示例为自己模拟数据,跟原题有出入,去掉了第一行数据个数,不影响使用

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

知识点: 差分

示例一:

输入:

2 3 1

6 9 2

0 5 1

输出: 2

示例二:

输入:

3 9 2

4 3 7

输出: 5

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
// 定义差分数组
let arr = [];
void (async function () {
    // 任务混部JS实现
    while ((line = await readline())) {
        // 截取每组数据组成数组并调用处理方法
        let data = line.split(" ");
        getData(data);
    }
})();
function getData(data) {
    // 截取最后一位的value值
    let value = parseInt(data.pop()); 
    // 补齐数组最大长度,需要多一位做数据处理操作
    while (arr.length <= parseInt(data[1]) + 1) {
        arr.push(0);
    } 
    // 得到差分数组
    // 截取数组第一位为开始位置加value,第二位为结束位置后一位减去value
    arr[data[0]] += value;
    arr[parseInt(data[1]) + 1] -= value;
}
rl.on("close", () => {
    // 差分数组最后求和方法,前一位+后一位;返回数组为n-1位
    for (let i = 1; i < arr.length; i++) {
        arr[i] += arr[i - 1];
    }
    // 得到数组最大值即为任务混部最少需要多少服务器。
    let max = Math.max(...arr);
    console.log(max);
});

全部评论
这个第二组数据应该是4 7 3 吧
3 回复 分享
发布于 2023-04-19 19:01 北京
牛皮
点赞 回复 分享
发布于 2023-04-26 16:52 湖北

相关推荐

点赞 评论 收藏
分享
评论
5
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务