package problems.medium;
import problems.utils.Interval;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Created by sherxon on 1/28/17.
*/
public class MergeIntervals {
public static void main(String[] args) {
List<Interval> list = new ArrayList<>();
list.add(new Interval(1, 4));
list.add(new Interval(1, 4));
merge(list);
System.out.println(list);
}
static List<Interval> merge(List<Interval> intervals) {
if (intervals.size() < 2) return intervals;
intervals.sort((a, b) -> a.start - b.start);
List<Interval> list = new ArrayList<>();
list.add(intervals.get(0));
for (int i = 1; i < intervals.size(); i++) {
Interval prev = list.get(list.size() - 1);
Interval current = intervals.get(i);
if (current.start == prev.start) {
if (current.end > prev.end)
prev.end = current.end;
} else if (current.start <= prev.end) {
if (current.end > prev.end)
prev.end = current.end;
} else list.add(current);
}
return list;
}
static public List<Interval> merge2(List<Interval> intervals) {
if (intervals.size() <= 1) return intervals;
Collections.sort(intervals, (a, b) -> {
int c = a.start - b.start;
if (c == 0) c = a.end - b.end;
return c;
});
List<Interval> list = new ArrayList<>();
list.add(intervals.get(0));
for (int i = 1; i < intervals.size(); i++) {
Interval prev = list.get(list.size() - 1);
Interval cur = intervals.get(i);
if (prev.end >= cur.start && cur.end >= prev.end) {
prev.end = cur.end;
} else if (cur.start > prev.end) {
list.add(cur);
}
}
return list;
}
}