image.png

思路

image.png

code

  1. public int[][] merge(int[][] intervals) {
  2. List<int[]> res = new ArrayList<>();
  3. if(intervals==null||intervals.length==0)
  4. return res.toArray(new int[0][]);
  5. //使用lambda表达式按照第一个元素进行排序
  6. Arrays.sort(intervals,(a,b)->a[0]-b[0]);
  7. int i=0;
  8. int n=intervals.length;
  9. //遍历所有的区间
  10. while(i<n){
  11. int left = intervals[i][0];
  12. int right = intervals[i][1];
  13. //如果a[1]>=b[0],说明两个区间有重叠
  14. while(i<n-1&&intervals[i+1][0]<=right){
  15. i++;
  16. //右边界为max(a[1],b[1])
  17. right = Math.max(right,intervals[i][1]);
  18. }
  19. //添加到结果中
  20. res.add(new int[]{left,right});
  21. i++;
  22. }
  23. return res.toArray(new int[0][]);
  24. }