首页 > 解决方案 > 使用递归的加权作业调度

问题描述

我正在尝试对加权作业调度问题的强力解决方案。

这是我尝试过的。

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。

谁能指出我的错误?

标签: javascriptalgorithmrecursionjob-schedulingrecursive-backtracking

解决方案


您的循环for (let i = 0; i < jobs.length; i++) {仅在 i = 0 时运行,正如您稍后所做的那样return weight + maxWeight;。不知道你为什么有那条线,我猜你打算这样做

  if (returnedWeight + weight > maxWeight) {
    maxWeight = returnedWeight + weight;
  }

推荐阅读