题目:
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意:
区间的终点大于起点。
区间 [1,2] 和 [2,3] 不算相互重叠。
解答:
贪心策略:优先保留结尾小且不相交的区间
实现方法:先对区间结尾进行从小到大的排序,确保后一个区间的首大于前一个区间的尾,保留,计数加一,用区间总数减去不重叠的区间个数就是要去除的个数
class Solution(object):
def eraseOverLapIntervals(self,intervals):
if not intervals:
return 0
nums = sorted(intervals,key=lambda x:x[1])#按照每一个区间的末尾进行排序
count = 1
end = nums[0][1]#第一个区间的末尾作为对比
for st,en in nums:
if st >= end:#后面区间的start是否大于前面区间的end
count += 1
end = en
return len(nums)-count#用总区间减去不重叠的区间 就是要去除的区间
#测试
m = Solution()
k=m.eraseOverLapIntervals(([1,2],[1,2],[1,2]))
print(k)
s=m.eraseOverLapIntervals(([1,2],[2,4],[1,3]))
print(s)
运行结果与测试: