假设您是自由职业承包商并且一次只承担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
}
]
其他信息:
我看到这个问题作为一个潜在的求职面试问题发布,我认为这是一个很好的问题,但它完全让我难过。
我尝试(并且失败)的方法与此类似:
一旦你提出这样的想法,即在给定的时间范围内,多个工作可能比获得一个长工作更有利可图...
我很乐意找到解决方案,即使它是伪代码。
谢谢
答案 0 :(得分:0)
只有6个工作岗位,你有2 ^ 6个工作选择的可能性。 只需枚举就可行了。 然后检查它是否有效,并取最大值。
或者你可以按end_day排序并创建一个递归算法,其中最大值取决于将工作带入利润并暂停一段时间,或者不接受工作。