寻找最有利可图的演出

时间:2015-10-24 00:10:28

标签: algorithm sorting

假设您是自由职业承包商并且一次只承担1份合同,请提出一种算法,从下面的列表中选择最有利可图的非重叠职位:

potential_contract_jobs = [
  {
    "start_day": 1,
    "end_day": 5,
    "profit": 100
  },
  {
    "start_day": 5,
    "end_day": 6,
    "profit": 10
  },
  {
    "start_day": 15,
    "end_day": 20,
    "profit": 500
  },
  {
    "start_day": 10,
    "end_day": 10,
    "profit": 150
  },
  {
    "start_day": 9,
    "end_day": 12,
    "profit": 20
  },
  {
    "start_day": 11,
    "end_day": 12,
    "profit": 796
  }
]

其他信息:

我看到这个问题作为一个潜在的求职面试问题发布,我认为这是一个很好的问题,但它完全让我难过。

我尝试(并且失败)的方法与此类似:

  1. 迭代列表并自动选择没有重叠的任何作业
  2. 按利润重叠的作业列表
  3. 按盈利顺序开始接受
  4. 一旦你提出这样的想法,即在给定的时间范围内,多个工作可能比获得一个长工作更有利可图...

    我很乐意找到解决方案,即使它是伪代码。

    谢谢

1 个答案:

答案 0 :(得分:0)

只有6个工作岗位,你有2 ^ 6个工作选择的可能性。 只需枚举就可行了。 然后检查它是否有效,并取最大值。

或者你可以按end_day排序并创建一个递归算法,其中最大值取决于将工作带入利润并暂停一段时间,或者不接受工作。