【发布时间】:2016-01-23 13:01:44
【问题描述】:
我在解释这个问题时稍作修改,以便于解释。
有 n 名员工,我需要在一个月中的某一天为他们安排一次郊游,以便所有(或最多)员工都可以参加郊游。
要求每位员工填写一份在线调查,说明他的可用性,例如1-31 或 15-17 等等等等。有些甚至可能一天都没有。 我必须安排覆盖所有员工的旅行次数没有限制(不考虑谁整个月都不可用),但我想找出最少的日期集以覆盖所有员工。所以在最坏的情况下,我将不得不安排 31 次旅行。
问题:我可以使用哪种数据结构在此数据结构上运行最佳拟合算法?解决此问题的最佳方法是什么?
当然,我指的是节省时间和空间的方法,但我也在寻找其他解决方案。
我认为的方法是维护一个包含 31 个整数的数组并将其初始化为 0。遍历每个员工并根据他们的可用日期增加数组索引。最后对 31 的数组进行排序。最大值表示 qhich max 员工可用的日期。并对被排除在外的员工应用相同的逻辑。但问题是要移除被排除在外的员工。为此,我将不得不遍历整个员工列表一次,以了解哪些员工可以被删除,并形成一个新的被遗漏员工列表,我可以在其上应用之前的逻辑。在我看来,以这种方式遍历列表两次以删除员工并不是最好的。有什么想法吗?
【问题讨论】: