例如:我有intervals = [[-5,-3],[-4,-1],[1,3],[4,8],[5,10],[10,12], [15,20]](不必像那样排序)
我希望函数返回 me [[-5,-1],[1,3],[4,12],[15,20]]。因为[-5,-3],[-4,-1] and [4,8],[5,10],[10,12]有相互拦截的数字。即,我希望该函数返回所有“孤独”区间以及它们的数字相互截取的区间并集的最小值和最大值。
我有这段代码可以做类似的事情,但这还不是我想要的:
def maxDisjointIntervals(list_):
# Lambda function to sort the list
# elements by second element of pairs
list_.sort(key = lambda x: x[1])
# First interval will always be
# included in set
print("[", list_[0][0], ", ", list_[0][1], "]")
# End point of first interval
r1 = list_[0][1]
for i in range(1, len(list_)):
l1 = list_[i][0]
r2 = list_[i][1]
# Check if given interval overlap with
# previously included interval, if not
# then include this interval and update
# the end point of last added interval
if l1 > r1:
print("[", l1, ", ", r2, "]")
r1 = r2
这段代码返回给我这个输出:[[-5, -3],[1, 3],[4, 8],[10, 12],[15, 20]]
重复我之前所说的:我希望它返回这个输出[[-5, -1],[1, 3],[4, 12],[15, 20]]
我希望我的解释不会太冗长,因为我不是以英语为母语的人。谢谢!