Merge Overlapping Intervals

前端 未结 5 741
深忆病人
深忆病人 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条回答
  •  Happy的楠姐
    2021-02-04 11:34

    Here is your refined code:

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    class Interval {
        int start;
        int end;
    
        Interval() {
            start = 0;
            end = 0;
        }
    
        Interval(int s, int e) {
            start = s;
            end = e;
        }
    }
    
    public class Ideone {
        public static void main(String[] args) throws java.lang.Exception {
            ArrayList x = new ArrayList();
            Interval i1 = new Interval(1, 3);
            Interval i2 = new Interval(2, 6);
            Interval i3 = new Interval(8, 10);
            Interval i4 = new Interval(15, 18);
    
            x.add(i1);
            x.add(i2);
            x.add(i3);
            x.add(i4);
    
            ArrayList r = merge(x);
    
            for (Interval i : r) {
                System.out.println(i.start + " " + i.end);
            }
    
        }
    
        public static ArrayList merge(ArrayList intervals) {
    
            if (intervals.size() == 0)
                return intervals;
            if (intervals.size() == 1)
                return intervals;
    
            Collections.sort(intervals, new IntervalComparator());
    
            Interval first = intervals.get(0);
            int start = first.start;
            int end = first.end;
    
            ArrayList result = new ArrayList();
    
            for (int i = 1; i < intervals.size(); i++) {
                Interval current = intervals.get(i);
                if (current.start <= end) {
                    end = Math.max(current.end, end);
                } else {
                    result.add(new Interval(start, end));
                    start = current.start;
                    end = current.end;
                }
    
            }
    
            result.add(new Interval(start, end));
    
            return result;
    
        }
    }
    
    class IntervalComparator implements Comparator {
        public int compare(Object o1, Object o2) {
            Interval i1 = (Interval) o1;
            Interval i2 = (Interval) o2;
            return i1.start - i2.start;
        }
    }
    

    And name this java file "Ideone.java"

提交回复
热议问题