给出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
答案 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)