查找固定时间参加派对的最大客人人数

时间:2018-11-19 11:36:23

标签: algorithm

给出2个列表,该列表指示每位客人参加聚会的时间和离开时间如何找到至少minTime秒在一起的最多客人(或他们的客人)?< / p>

示例:

Input

List<float> ArrivingList = {3,2,8,12,5};
List<float> LevingList =   {17,7,19,15,11};
int minTime = 4;

意思是第一位客人在时间3到达并在时间17离开,第二位客人在时间2到达并在时间7离开。等等...

Output: {0,1}; //Or {0,4} both are correct for this example.

我知道如何在没有minTime需求的情况下解决该问题,但是我无法弄清楚这个版本。

编辑:请注意,我的问题不是this one的重复项。 我正在寻找在指定的时间段内可以重叠的最大客人人数。

编辑2 我的目标是获得将minTime花费在一起的来宾中最大的重叠子集。 范例2: Input

List<float> ArrivingList = {1,2,3};
List<float> LevingList =   {4,5,6};
int minTime = 3;

考虑间隔(2,5)。即使有3秒钟的重叠,它也不会继续,请在来宾#0和来宾#2之间切换。

 `Output:` {0};// or {1} or {2} because all of the guests spends the min time some time but never together

1 个答案:

答案 0 :(得分:1)

我想您可以使用以下算法:

Init answer as empty array
For each pair of guess i,j:
    OverlapTime = min(leaving(i),leaving(j)) - max(arriving(i),arriving(j))
    If overlapTime >= minTime:
        Push (i,j) to answer array

这将是O(n ^ 2)