【发布时间】:2014-02-26 09:51:02
【问题描述】:
你有 N 个人。每个人都有一份空闲时间列表。
例如,人 1 的空闲时间段可能是 [(9, 9.5); (11, 12.5)] 这意味着他在 9 点到 9:30 之间以及 11:00 到 12:30 之间有空。
你想找一个时间段,这样你就可以把所有 N 个人聚集在一起,开一个 2 小时的会议。
写一个方法:
输入:
一个list的list,里面的每个list都是一个空闲时间段的list 人
输出:
一个或多个可用于召开 N 人会议的时间段 持续2个小时;或者你找不到这样的时间段
我的想法是这样的:
按如下方式合并两个人的时间段列表:如果两个时间段不重叠,则删除开始时间早的那个;否则,将重叠部分(新时间段)放入新列表中,并删除开始时间较早的部分。继续合并。
合并完成后,我们得到一个包含两个人时间重叠的新列表,然后将其与第三个人合并,以此类推,直到所有列表合并。
扫描最终的合并列表,找出 2 小时的时段。
如果假设每个人都有M 空闲时间段,则此算法为**O(N*M)。
有没有更好的解决方案?
【问题讨论】:
标签: algorithm