由于每个 (X,Y) 对的两个值必须按顺序 (X 您只需按 Y 值排序即可。
鉴于此示例数据:
(15,40) (5,8) (1,10) (6,8) (9,20) (2,4) (36,37) (34,35) (9,14) (30,31)
按Y排序可得:
(2,4) (6,8) (5,8) (1,10) (9,14) (9,20) (30,31) (34,35) (36,37) (15,40)
然后循环,如果 X 大于链中最后一个 Y,则将一对添加到链中,否则忽略它。
请注意,在此示例中,(6,8)
碰巧之前已经排序过(5,8)
。当 Y 值相等时,选择哪一对作为链并不重要,只要 X 值满足大于前一个 Y 的条件即可。
下面的图表将排序对显示为数轴上方的条形。从第一对开始,(2,4)
,添加到底部链中的每一个都是黄色的。从视觉上看,灰色的被跳过,因为有一个黄色的“阻碍”它被放入链中(重叠的值)。
证明:
在链中包含更多对的唯一方法是将一对替换为具有较小 Y 值的对,以允许下一对具有较小的 X 值,从而可能将另一对安装到之前无法安装的位置。如果用具有相同 Y 值的一对替换一对,您将一无所获。如果替换的 Y 值较大,您所做的一切可能会阻止一些之前适合的对。
因为这些对已按 Y 值排序,所以您永远不会找到具有较小 Y 的替换。在已排序的对中“向前”查看,它们都将具有相同或更大的 Y 值。 “向后看”,任何最初从链中被淘汰的都是因为X值不够高,情况仍然如此。