具有共同交叉点的最大范围数

时间:2015-12-05 15:46:14

标签: c++ algorithm set range intersection

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

如果我们有这些范围:

<0, 4>

<2, 6>

<4, 6>

因此,在这种情况下,所有集合都有一个共同的交集,它是

<4, 4>

有没有办法在C ++中找到它?

1 个答案:

答案 0 :(得分:2)

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

    对于输入<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,。