根据最大计数合并重叠间隔,以获取客人数量



我想制作一个程序,该程序同时算出多少客人。所有客人都有到达和退出时间。我已经数了最大的客人数量,当它达到最大值时,它可以给我一次。我想要的是最大客人数量的所有时间间隔

我尝试使用重叠的方法来做到这一点,但它不太有用,可能是因为它比较了列表中的太多或太少的值。我有两个列表,即到达和退出,当我在控制台应用程序上写入值时,我会添加值。

我尝试在一个列表中添加来自时间和时间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 = 0MaxCount

浏览列表,将标志字段添加到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并开始新的输出间隔

最终输出MaxCountOutList

的间隔

相关内容

  • 没有找到相关文章

最新更新