我想制作一个程序,该程序同时算出多少客人。所有客人都有到达和退出时间。我已经数了最大的客人数量,当它达到最大值时,它可以给我一次。我想要的是最大客人数量的所有时间间隔
我尝试使用重叠的方法来做到这一点,但它不太有用,可能是因为它比较了列表中的太多或太少的值。我有两个列表,即到达和退出,当我在控制台应用程序上写入值时,我会添加值。
我尝试在一个列表中添加来自时间和时间2的时间并对其进行整理,但是它为某些测试输入添加了太多值。
int max = 1; int count = 1;
int i = 1; int j = 0;
long time = arrival[0]; long time2= dep[0];
while (i < n1 && j < n1) // n1 is the length of the input integer
{
if (arrival[i] < dep[j])
{
count++;
if (count >= max)
{
max = count;
time = arrival[i];
time2= dep[j];
}
// possible location of console.writeline(time1 + time2)
// somewhere here I would add time and time2 to a new list
i++;
}
else
{
count--;
j++;
}
} Console.WriteLine(max); Console.WriteLine(time1 + " " + time2);
因此,假设我的意见是5个间隔的客人:(12,30(,(18,25(,(25,40(,(13,15(和(32,36(想要的结果将为
2//当时最大客人
13 15//每个间隔的新线
18 30
32 36
但我无法正常工作,它仅显示32-36。如果我将控制台放置在可能的位置,它给了我:13-15、18-25、25-30、32-36。使用其他重复的测试输入(例如0到5在列表中出现不止一次(,这给了我太多的间隔。
制作数组或包含所有来宾的到达和出发时间的结构列表,以及 +1/-1
flag表示事件类型( 1到达(。
按时间字段进行排序列表。如果领带将到达事件放在首位的情况
制作Count = 0
和MaxCount
。
浏览列表,将标志字段添加到Count
。
Count
的值在每个事件表示房间中的任务数。
Guests (12,30), (18,25), (25,40), (13,15) and (32,36)
Events 12;1 13;1 15;-1 18;1 25;-1 25;1 30;-1 32;1 36;-1 40;-1
Count 0 1 2 1 2 1 2 1 2 1 0
^ x ^ x ^ x ^ x
Max intervals (^-x)
当Count
到达MaxCount
-启动新输出间隔时,当它变为MaxCount - 1
时 - 完成该间隔并将其添加到OutList
当Count
超过MaxCount
-清除OutList
时,制作MaxCount - Count
并开始新的输出间隔
最终输出MaxCount
和OutList