23. Merge Intervals

Topic :

arrays

Difficulty :

medium

Problem Link :


problem statement

Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.

Example 1:

Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].
Example 2:

Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.

Constraints:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

solution

// merge overlapping sub intervals // 
import java.io.*;
import java.util.*;
class MergeIntervals
{ 
   public static int [][]merge(int [][] intervals)
   { List<int[]> res=new ArrayList<>();
       
      if(intervals.length==0 || intervals==null)
       return intervals;
       
       Arrays.sort(intervals,(a,b)-> a[0]-b[0]);//sort according to the start time //
       
       int start=intervals[0][0];
       int end=intervals[0][1];
       
       for(int [] i: intervals)
       { if(i[0]<=end)
           { end=Math.max(end,i[1]); // merge the intervals that can be merged //
            }
           else 
           { res.add(new int[]{start,end}); 
             start=i[0];
             end=i[1];
            }
        }
        res.add(new int []{start,end});
        return res.toArray(new int[0][]);        
    }
    
    public static void main (String args[])
    { 
        int intervals[][]={{1,3},{2,6},{8,10},{15,18}};
         int ans[][]=merge(intervals);
         for(int i=0;i<ans.length;i++)
         {for (int j=0;j<ans[i].length;j++)
            {System.out.print (ans[i][j] +" ");
            }
              System.out.println();
        }
    }
}
Copyright © 2023 KIZLE. - All Rights Reserved.
Website by Kounik Maitra