我正在编写一个带有困难编程问题的调度程序.有几个事件,每个事件都有多个会议时间.我需要找到会议时间的安排,以便每个时间表包含任何给定事件一次,使用每个事件的多个会议时间之一.
显然我可以使用蛮力,但这很少是最好的解决方案.我猜这是一个相对基本的计算机科学问题,一旦我开始学习计算机科学课程,我就会学到这些问题.与此同时,我更喜欢任何我可以阅读的链接,甚至只是我可以谷歌的名字.
假设我有一个包含索引的列表列表[[start, end], [start1, end1], [start2, end2]].
例如:
[[0, 133], [78, 100], [25, 30]].
如何检查列表之间的重叠并删除每次更长的列表?所以:
>>> list = [[0, 133], [78, 100], [25, 30]]
>>> foo(list)
[[78, 100], [25, 30]]
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止尝试做的事情:
def cleanup_list(list):
i = 0
c = 0
x = list[:]
end = len(x)
while i < end-1:
for n in range(x[i][0], x[i][1]):
if n in range(x[i+1][0], x[i+1][1]):
list.remove(max(x[i], x[i+1]))
i +=1
return list
Run Code Online (Sandbox Code Playgroud)
但除了令人费解之外它还没有正常工作:
>>>cleanup_list([[0,100],[9,10],[12,90]])
[[0, 100], [12, 90]]
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
编辑:
其他例子是:
>>>a = [[0, 100], …Run Code Online (Sandbox Code Playgroud) 在处理自定义日历时,我无法弄清楚如何找到与任何其他时间段重叠的时隙.
时隙从0到720(上午9点到晚上9点)开始,每个像素代表一分钟.
var events = [
{id : 1, start : 0, end : 40}, // an event from 9:00am to 9:40am
{id : 2, start : 30, end : 150}, // an event from 9:30am to 11:30am
{id : 3, start : 20, end : 180}, // an event from 9:20am to 12:00am
{id : 4, start : 200, end : 230}, // an event from 12:20pm to 12:30pm
{id : 5, start : 540, end : …Run Code Online (Sandbox Code Playgroud)