我有一个元素列表,其中每个元素都是非负整数范围。我想过滤列表,只有最大的未封闭范围被分离出来。我想用O(n)
的方式做到这一点与单循环。该列表将始终按照每个范围的起始整数排序。封闭范围元素可以在列表中的封闭范围元素之前或之后出现。以O(n)时间复杂度过滤出列表元素
例子:
假设我是{[0-12],[5-15],[5-20],[10-20],[11-30],[25-42],[28-40]}
列表。在这个列表中,范围[5-15]
和[10-20]
落在[5-20]
范围内,所以我需要放弃它们。同样,范围元素[28-40]
被丢弃,因为它落入范围[25-42]
。 我想用一个循环来完成这个过滤,以实现时间复杂度为O(n)
。
有可能做到这一点吗?如果不是,那么使用超过O(n)
的复杂度进行过滤的最佳方法是什么。 Java中的解决方案会很好。
对于在您的示例中列表将按照“开始,结束”排序的顺序,您有什么担保?会永远如此吗?你想用部分重叠的范围做什么,例如'1-6,3-8'? – AakashM
列表中的元素仅按范围的开始排序。部分重叠不会被滤除。 –
相关:http://stackoverflow.com/q/23887686/1225328 – sp00m