一、题目内容

image.png

二、题解

解法1:

思路

区间左起点排序,然后模拟合并

代码

  1. public class Solution {
  2. public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
  3. ArrayList<Interval> ans = new ArrayList<Interval>();
  4. if(intervals == null || intervals.isEmpty()){
  5. return ans;
  6. }
  7. if(intervals.size() == 1){
  8. return intervals;
  9. }
  10. Collections.sort(intervals,(a,b)->a.start-b.start);
  11. int left = 0,right = 1;
  12. Interval curInterVal = intervals.get(left);
  13. while(right<intervals.size()){
  14. Interval rightInterval = intervals.get(right);
  15. if(canMerge(curInterVal,rightInterval)){
  16. curInterVal = mergeInterval(curInterVal,rightInterval);
  17. right++;
  18. }else{
  19. ans.add(curInterVal);
  20. left = right;
  21. right = left+1;
  22. curInterVal = intervals.get(left);
  23. }
  24. }
  25. ans.add(curInterVal);
  26. return ans;
  27. }
  28. private boolean canMerge(Interval inte1,Interval inte2){
  29. //[start1,end1] [start2,end2], start1<start2
  30. if(inte2.start<=inte1.end){
  31. return true;
  32. }
  33. return false;
  34. }
  35. private Interval mergeInterval(Interval inte1,Interval inte2){
  36. return new Interval(inte1.start,Math.max(inte1.end,inte2.end));
  37. }
  38. }