今天在课堂上讨论了一个问题: n巴黎被给定(ai,bi),每对代表一个人,ai,bi代表他的进城日期和离开城市的2019年日期。 问题是,同一时期城市中的人口最多?
我试图将日期强制转换为[1,365](整数),然后将其插入一个AVL的入口,将退出日期插入另一个AVL,并保存两个指针的指针遍历一棵树并在需要时更新最大值。 我相信这种灵魂是天真的,因为它需要O(n ^ 2)。
我们学习的数据结构是: 数组,链接列表,队列,堆栈,堆,BST,AVL,堆,哈希表,跳过列表和图。
答案 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)
。