本人算法小白,如有不合理地方还请大神指点;示例为自己模拟数据,跟原题有出入,去掉了第一行的数据个数,不影响使用
题目描述:公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你设计算法帮他们解决一个任务混部问题:有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);
});