这个问题可能与其他问题相似,但有点不同。我们假设我们有一组这样的间隔让我们说A-9是数字,但为了格式化,我使用了字母):
<-a---> <------c--->
<------------MAIN>
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
<--d-> <--b------->
因此,我们的主间隔从I
变为Z
,间隔a
从M
变为S
,依此类推。< / p>
现在我希望在主要的一个(基本上是基本约束)中具有最重叠的区间,其中MO是(a和d)和QS(a和b)和UZ(b和c)每个都有2个重叠(超出Z
的所有内容都是不可能的,因为它超出了主要区间
我基本上想要一个列表(也就是数组)的间隔和Main内的重叠数,而不计算主要的那个数字(排序不需要有足够的方法来做到这一点)在PHP中。
我想过制作一个间隔的图片,然后计算每个像素列的颜色但是那个
所以,TLDR,我需要一个解决方案
我知道这是一个非常具体的问题,但我并不精通数学和算法。
答案 0 :(得分:1)
构建2个向量。一个包含起点,一个包含每个区间的终点。
对2个向量进行排序。
虽然你有两个向量中的任何一个:
您可以从最大值减少1以忽略主间隔。您可以保留最大数量的部分列表(只要确保在获得更好的结果时清除它)。
这是O(NlogN),包含您的间隔数。
答案 1 :(得分:1)
这个基本算法是在整个长度上使用一个计数器,当你遇到一个起点时它会增加,当你遇到一个终点时它会减少。
跟踪此计数器达到的最大值。
再次查看整个长度,这次在以下情况下将位置添加到result
数组:
1.你在MAIN部分边界内。
2.您的计数器(以相同的方式保持)等于您之前计算的最大值。