解决这个面试问题的策略?

时间:2014-07-11 17:34:24

标签: algorithm

我在采访中被问到这个问题。我知道在StackOverflow上,我们不应该要求直接回答i / w问题。所以不是那样,我会要求正确的方法/提示来解决它

  

我已经获得了两组电影的开始时间和结束时间。

     

int start [],int end []

对于这两个阵列,我必须找到我能观看的最大电影。在我看来,这与问题完全相反,我们必须找到给定间隔的最大重叠。

我的方法是这样,如果对于任何电影,没有重叠,我们应该观看它。但是,如果存在重叠且其他重叠持续时间较短,则丢弃此电影,否则拍摄此电影。

此算法未通过此数据集

  电影1:4,8   电影2:6,11   电影3:2,5

这种算法正确地消除了4,8,因为2.5是更理想的。然而,它消除了6,11而支持4,8,尽管这是我们已经消除的东西,应该考虑它。

我可以知道解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以为此问题证明贪婪的选择属性。即,假设您有最佳解决方案(最多电影数)并考虑第一部电影。如果您没有选择其他电影的结束时间早于第一部选定电影的结束时间,那么您可以将第一部选定的电影与具有最早结束时间且仍具有有效的最优解。因此,您可以按结束时间对电影进行排序,然后选择具有最早结束时间的电影,然后迭代选择最早结束时间与先前所选电影不重叠的电影。如果包括排序时间,则给出O(n log n)时间算法,排序后它的线性时间为O(n)。