华为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);
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值