题目

WeChat6741aee454ae78f790d08ed23029d0a9.png

解题思路

假设intervals = [[s1, e1], [s2, e2]]
此题解题思路比较简明,首先是排序。如果interval中的起始点都按顺序排列的话,我们可以保证下一段interval一定会以下两种结果之一:

  1. 覆盖得到新的result [-1] (即s2<=e1)
  2. 独立于之前的result [-1]被append进入result (即s2>e1)
  1. class Solution:
  2. def merge(self, intervals: List[List[int]]) -> List[List[int]]:
  3. result = []
  4. intervals.sort(key = lambda x: x[0])
  5. result.append(intervals[0])
  6. for lst in intervals:
  7. if lst[0] <= result[-1][1]:
  8. # overlap
  9. if lst[1] > result[-1][1]:
  10. result[-1][1] = lst[1]
  11. else :
  12. result.append(lst)
  13. return result

注意

因为array专区,我们不考察sorting algorithm。此处sort的时间复杂度为O(nlgn),我们可以简单看做用了merge sort/ quick sort等方法完成的排序。O(nlgn + n) 为程序的时间复杂度。