Given the life time of different elephants, find the period when maximum number of elephants lived
我遇到了一个面试问题:
"考虑到不同大象的生命时间。找出最大数量的大象活着的时期。" 例如:
输入:
输出:
我想知道这个问题是否与'n'个字符串的最长子字符串问题有关,这样每个字符串代表一个时间段的连续范围。
例如:
如果没有,那么这个问题的解决方案是什么? 我想用C ++编写代码。
任何帮助将不胜感激。
对于每只大象,创造两个事件:大象出生,大象死亡。按日期对事件排序。现在,您可以浏览这些活动,并了解有多少大象活着;每次达到新的最大值时,记录开始日期,每次从最大记录下降结束日期。
此解决方案不依赖于整数日期。
如果我是你在采访中我将创建一个
然后我会排序并找到最大的数字。
有可能使用
我想知道你是否知道更好的解决方案?
从您的输入中我发现所有时间段都是重叠的,那么在这种情况下解决方案很简单
我们被给予范围作为[开始结束]
所以答案将是所有开始和最小的所有结束的最大值。
只需遍历每个时间段,找到所有结束的所有开始和最大值的最大值
注意:此解决方案适用于所有时间段
在你的例子中
所有输入的最大值= 6
所有输出的最小值= 7
这类似于检查是否缺少括号的程序。它还与日期范围重叠有关。这个主题在StackOverflow和其他地方被打死。这里是:
确定两个日期范围是否重叠
我已经通过将所有开始/结束范围放在一个结构(或类)向量中然后对它们进行排序来实现这一点。然后你可以浏览矢量并检测大象水平的过渡。 (大象的数量 - 说明问题的有趣方式!)