javascript - 使用递归的加权作业调度
问题描述
我正在尝试对加权作业调度问题的强力解决方案。
这是我尝试过的。
const solution = jobs => {
let maxWeight = 0;
for (let i = 0; i < jobs.length; i++) {
const endTime = jobs[i][1];
const weight = jobs[i][2];
const filteredJobs = jobs.filter(
(job, index) => job[0] >= endTime);
const returnedWeight = solution(filteredJobs);
if (returnedWeight > maxWeight) {
maxWeight = returnedWeight;
}
return weight + maxWeight;
}
return maxWeight;
};
我用来测试我的解决方案的输入是 [[1, 2, 50], [3, 5, 20], [6, 19, 100], [2, 100, 200]]。当我执行程序时,它返回 170,即执行顺序为 1->2->3 时。但是,按 1->4 的顺序执行时,预期输出为 250。
谁能指出我的错误?
解决方案
您的循环for (let i = 0; i < jobs.length; i++) {
仅在 i = 0 时运行,正如您稍后所做的那样return weight + maxWeight;
。不知道你为什么有那条线,我猜你打算这样做
if (returnedWeight + weight > maxWeight) {
maxWeight = returnedWeight + weight;
}
推荐阅读
- autodesk-forge - 结果文件的格式不是我要求的
- google-sheets - 控制哪些单元格是静态的,哪些单元格在列宽公式上进行迭代
- php - 在特定子字符串之后从字符串中提取多个数字
- ms-access - 从 MS Access 数据库中的 OLE 字段中提取数据
- typescript - TypeScript 如何调用流功能
- flutter - Flutter web PWA 离线支持图片、音频文件、视频文件等
- javascript - Regex: Check if (among others) specific characters are present in a string
- netlogo - Netlogo中海龟的显示顺序
- python - 时间序列变化点检测
- java - 如何在 MongoDB 中查询列表的嵌套列表?