Merge Overlapping Intervals

前端 未结 5 763
深忆病人
深忆病人 2021-02-04 10:48

Question : Given a set of time intervals in any order, merge all overlapping intervals into one and output the result which should have only mutually exclusive intervals. Let th

5条回答
  •  你的背包
    2021-02-04 11:31

    Ideone.java:

    import java.util.*;
    
    public class Ideone
    {   
        public static void main (String[] args) throws java.lang.Exception
        {
            ArrayList x = new ArrayList<>();
    
            x.add(new Interval(1, 3));
            x.add(new Interval(2, 6));
            x.add(new Interval(8, 10));
            x.add(new Interval(15, 18));
            x.add(new Interval(17, 20));
    
            x = merge(x);
    
            for(Interval i : x)
            {
                System.out.println(i.getStart() + " " + i.getEnd());
            }
        }
    
        public static ArrayList merge(ArrayList intervals) {
    
            if(intervals.size() == 0 || intervals.size() == 1)
                return intervals;
    
            Collections.sort(intervals, new IntervalComparator());
    
            Interval first = intervals.get(0);
            int start = first.getStart();
            int end = first.getEnd();
    
            ArrayList result = new ArrayList();
    
            for (int i = 1; i < intervals.size(); i++) {
                Interval current = intervals.get(i);
                if (current.getStart() <= end) {
                    end = Math.max(current.getEnd(), end);
                } else {
                    result.add(new Interval(start, end));
                    start = current.getStart();
                    end = current.getEnd();
                }
            }
    
            result.add(new Interval(start, end));
            return result;
        }
    }
    
    class Interval 
    {
        private int start;
        private int end;
    
        Interval() {
            start = 0;
            end = 0;
        }
    
        Interval(int s, int e) 
        {
            start = s;
            end = e;
        }
    
        public int getStart() {
            return start;
        }
    
        public int getEnd() {
            return end;
        }
    }
    
    class IntervalComparator implements Comparator
    {
        public int compare(Interval i1, Interval i2)
        {
            return i1.getStart() - i2.getStart();
        }
    }
    
    • main method is inside the public class Ideone
    • Interval and IntervalComparator are just inner classes

    Output:

    1 6
    8 10
    15 20
    

提交回复
热议问题