题解 | #合并区间#
合并区间
http://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a
新建一个类代理原来的对象实现Comparable接口进行排序
import java.util.Arrays;
import java.util.Comparator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collections;
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
public class Solution {
class IntervalProxy implements Comparable{
Interval interval;
IntervalProxy(Interval interval){
this.interval = interval;
}
@Override
public int compareTo(Object o) {
IntervalProxy intervalProxys = (IntervalProxy) o;
return this.interval.start < intervalProxys.interval.start?-1:1;
}
}
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
if(intervals == null || intervals.size() == 0){
return new ArrayList<Interval>();
}
ArrayList<IntervalProxy> intervalProxys = new ArrayList<IntervalProxy>();
Iterator<Interval> iterator = intervals.iterator();
while(iterator.hasNext()){
intervalProxys.add(new IntervalProxy(iterator.next()));
}
Collections.sort(intervalProxys);
ArrayList<Interval> newIntervals = new ArrayList<Interval>();
newIntervals.add(new Interval(intervalProxys.get(0).interval.start,intervalProxys.get(0).interval.end));
for(int i = 1; i < intervalProxys.size(); i++){
while(i < intervalProxys.size()){
if(newIntervals.get(newIntervals.size()-1).end >= intervalProxys.get(i).interval.start){
newIntervals.get(newIntervals.size()-1).end = Math.max(newIntervals.get(newIntervals.size()-1).end,intervalProxys.get(i).interval.end);
}else{
newIntervals.add(new Interval(intervalProxys.get(i).interval.start,intervalProxys.get(i).interval.end));
}
i++;
}
}
return newIntervals;
}
}