![]() |
1
2
提示:对列表进行排序。 |
![]() |
2
1
假设只有一个区间[0,1]。如果它不在你的列表中只是为了方便而添加它。 对端点进行排序。如果两个端点相等,请在相应的右端点上反向排序。因此[0.1,0.2],[0.1,0.3]将被排序为0.1,0.1,0.2,0.3,其中第一个0.1与第二个间隔。同样,如果右端点相等。 每个端点都应该有对其间隔的引用,这样您就可以找到给定端点的间隔。 扫描已排序的终结点。像你一样,造一棵树。使用[0,1]作为根。节点可以是红色或绿色。一开始是红色的。所以根节点最初是红色的。 树的概念是,最终,如果一个间隔包含另一个间隔,它将成为树中的祖先。如果两个间隔不重叠或部分重叠,它们将位于不同的分支中,并且它们唯一的共同祖先将是根,或包含它们的其他间隔。 当遇到每个左端点时,通过将其间隔的红色节点添加到当前树节点,将其添加到树中的暂定位置。因此,我们遇到的第一个端点会导致相应的间隔被添加到根节点下,并成为当前节点。因此,在遇到其右端点之前,树节点可能有多个附加到它的节点。 当遇到右端点时,其节点将变为绿色,因为我们已经将其从一端完全覆盖到另一端。如果它有任何红色的子节点,则必须移动它们,因为虽然刚刚变绿的节点包含其左端,但它不包含其右端。所以我们将它们全部移到父节点(父节点必须仍然是红色)。 我们继续这个过程,直到到达1.0端点。此时树已完成。所有节点均为绿色。每个节点下的节点表示相应间隔包含的间隔。 |
|
3
1
|
![]() |
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 6 月前 |
![]() |
Alisa Petrova · 在有向图中更改一对顶点以创建循环 7 月前 |
![]() |
b39b332d · 使用C++标准库实现高效间隔存储 11 月前 |
![]() |
Paul C · 在维基百科上,将二叉搜索树转换为排序链表的算法是否存在错误? 11 月前 |
![]() |
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 11 月前 |
![]() |
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 11 月前 |