Skip to content

Instantly share code, notes, and snippets.

@cangoal
Last active August 29, 2015 14:22
Show Gist options
  • Save cangoal/acc35b23ed6303a7d0b1 to your computer and use it in GitHub Desktop.
Save cangoal/acc35b23ed6303a7d0b1 to your computer and use it in GitHub Desktop.
LeetCode - Merge Intervals
//
public List<Interval> merge(List<Interval> intervals) {
ArrayList<Interval> ret = new ArrayList<Interval>();
if(intervals == null || intervals.size() ==0) return ret;
Collections.sort(intervals, comparator);
Interval newInterval = intervals.get(0);
for(int i=1; i<intervals.size(); i++){
Interval curInterval = intervals.get(i);
if(curInterval.start > newInterval.end){
ret.add(newInterval);
newInterval = curInterval;
} else if (curInterval.end < newInterval.start){
ret.add(curInterval);
} else {
newInterval = new Interval(Math.min(newInterval.start, curInterval.start), Math.max(newInterval.end, curInterval.end));
}
}
ret.add(newInterval);
return ret;
}
public Comparator<Interval> comparator = new Comparator<Interval>(){
@Override
public int compare(Interval interval1, Interval interval2){
return interval1.start - interval2.start;
}
};
// better solution
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> ret = new ArrayList<Interval>();
if(intervals==null || intervals.size()==0){
return intervals;
}
Comparator<Interval> comp = new Comparator<Interval>(){
public int compare(Interval i1, Interval i2){
if(i1.start==i2.start)
return i1.end-i2.end;
return i1.start-i2.start;
}
};
Collections.sort(intervals, comp);
ret.add(intervals.get(0));
for(int i=1; i<intervals.size(); i++){
int index = ret.size()-1;
if(ret.get(index).end>=intervals.get(i).start){
ret.get(index).end = Math.max(intervals.get(i).end, ret.get(index).end);
}else{
ret.add(intervals.get(i));
}
}
return ret;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment