同一时期在城市中最多的人是多少?

时间:2019-09-10 23:17:44

标签: data-structures

今天在课堂上讨论了一个问题: n巴黎被给定(ai,bi),每对代表一个人,ai,bi代表他的进城日期和离开城市的2019年日期。 问题是,同一时期城市中的人口最多?

我试图将日期强制转换为[1,365](整数),然后将其插入一个AVL的入口,将退出日期插入另一个AVL,并保存两个指针的指针遍历一棵树并在需要时更新最大值。 我相信这种灵魂是天真的,因为它需要O(n ^ 2)。

我们学习的数据结构是: 数组,链接列表,队列,堆栈,堆,BST,AVL,堆,哈希表,跳过列表和图。

1 个答案:

答案 0 :(得分:0)

您可以将数组用于此逻辑。

由于一年中的天数是固定的,因此创建一个数组以保留该天中该天的人数。

count[365] = {0}; //Reset the counter, all entries should be zero.
maxCount = 0;
maxDay = -1;

for(day from 0 to (365-1))
{
    for(i from 0 to (n-1) person)
    {
        if(day >= ai && day <= bi) //Update this check based on whether ai and bi are inclusive or not.
        {
            count[day] = count[day]+1;
            if(count[day] > maxCount) //Keep track of maxCount, if required update it.
            {
                maxCount = count[day];
                maxDay   = day;
            }
        }
    }
}

Output maxDay, maxCount;

上述逻辑的时间复杂度为O(365*n) => O(n)