具有公共交集的范围的最大数目

Highest number of ranges that have common intersection

本文关键字:范围 最大数      更新时间:2023-10-16

我面临的问题是,我需要找到具有公共交集的最大数量的范围。但我找不到任何好的解决方案。

例如,如果我们有这些范围:

<0, 4>

<2, 6>

<4, 6>

在这种情况下,所有集合都有一个公共交集,它就是

<4, 4>

有没有办法在C++中找到这个??

  1. 创建一个包含坐标的结构,该坐标位于范围的开头或结尾
  2. 创建一个结构的数组(向量),让它包含输入范围的所有开始和结束
  3. 按坐标的升序对数组进行排序。如果他们有相同的坐标,就应该先开始后结束
  4. score初始化为零
  5. 对排序后的数组从头到尾进行迭代。如果元素开始,则递增score。如果元素结束,则递减score
  6. 答案将是整个迭代过程中score的最大值

示例:

对于输入<0, 4>, <2, 6>, <4, 6>,有6个事件:

0 begin
4 end
2 begin
6 end
4 begin
6 end

排序将这些事件排列如下:

0 begin
2 begin
4 begin
4 end
6 end
6 end

然后计算分数:

initial : score = 0
0 begin : score = 1
2 begin : score = 2
4 begin : score = 3
4 end   : score = 2
6 end   : score = 1
6 end   : score = 0

现在你知道答案是3,。