使用贪心思想,先按照end排序,然后依次寻找下一个(结束时前最早的)不重叠的区域,这样就得到了数量最多的构成不重叠的区域的数量,再用总数量减去最大不重叠区域的数量,就得到了最少的会引起重叠的区域的数量。
1 class Solution: 2 def eraseOverlapIntervals(self, intervals: 'List[Interval]') -> int: 3 n = len(intervals) 4 if n <= 1: 5 return 0 6 l = sorted(intervals,key=lambda a:a.end) 7 pre = l[0] 8 count = 1 9 for i in range(1,len(l)): 10 if l[i].start >= pre.end: 11 count+=1 12 pre = l[i] 13 14 return n-count