擅长:python、mysql、java
<p>您可以使用一个函数,该函数递归地遍历与现有可行任务列表不重叠的所有剩余任务,并在剩余任务中没有与任何可行任务重叠的任务时生成可行任务:</p>
<pre><code>def schedule(tasks, viable_tasks=None):
if not viable_tasks:
viable_tasks = []
tasks = sorted(tasks)
found_viable = False
for i, (start, end) in enumerate(tasks):
for viable_start, viable_end in viable_tasks:
if viable_start < start < viable_end or viable_start < end < viable_end or start < viable_start < end or start < viable_end < end:
break
else:
found_viable = True
yield from schedule(tasks[:i] + tasks[i + 1:], viable_tasks + [[start, end]])
if not found_viable:
yield viable_tasks
</code></pre>
<p>因此:</p>
^{pr2}$
<p>返回:<code>[[1, 2], [3, 4], [5, 7], [8, 9]]</code></p>